最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#設(shè)計(jì)模式之ChainOfResponsibility職責(zé)鏈模式解決真假美猴王問(wèn)題實(shí)例

 更新時(shí)間:2017年09月13日 10:49:13   作者:GhostRider  
這篇文章主要介紹了C#設(shè)計(jì)模式之ChainOfResponsibility職責(zé)鏈模式解決真假美猴王問(wèn)題,簡(jiǎn)單說(shuō)明了責(zé)任鏈模式的概念,并結(jié)合《西游記》中真假美猴王故事背景為實(shí)例分析了責(zé)任鏈模式的具體使用技巧,需要的朋友可以參考下

本文實(shí)例講述了C#設(shè)計(jì)模式之ChainOfResponsibility職責(zé)鏈模式解決真假美猴王問(wèn)題。分享給大家供大家參考,具體如下:

一、理論定義

職責(zé)鏈模式 向一個(gè) 對(duì)象提出一個(gè)請(qǐng)求,如果這個(gè)對(duì)象無(wú)法處理這個(gè)請(qǐng)求,將指定下一個(gè)對(duì)象來(lái)處理這個(gè)請(qǐng)求, 直到這個(gè)請(qǐng)求能得到處理為止。

二、應(yīng)用舉例

需求描述:《西游記》里面的真假美猴王的辨別過(guò)程

六耳獼猴和孫悟空不僅外型一模一樣,本事也是一模一樣,走到哪兒,都無(wú)法分辨誰(shuí)是真的誰(shuí)是假的!

① 觀音菩薩(GuangYinBodhisattva)暗念《緊箍?jī)褐洹?,兩個(gè)一齊喊疼,菩薩無(wú)計(jì)奈何。
② 李天王(LiTianWang)取照妖鏡照住,鏡中乃是兩個(gè)孫悟空,毫發(fā)不差。玉帝亦辨不出。
③唐僧(TangSeng)念《緊箍?jī)褐洹?,二人一齊叫苦,唐僧也不認(rèn)得真假。
④ 閻羅殿的諦聽(tīng)(YanLuoDianDiTing)可以分辨的出真假,卻不敢說(shuō)出來(lái)。
⑤ 最后被如來(lái)(RuLai)佛辨出真假,是所有神仙都沒(méi)有聽(tīng)說(shuō)過(guò)的新物種:六耳獼猴。

三、具體編碼

1. 添加一個(gè)接口,定義一個(gè)處理方法,一個(gè)指向下一個(gè)神仙的屬性。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Com.Design.Gof.ChainOfResponsibility
{
  /// <summary>
  /// 真 美猴王
  /// </summary>
  public enum TheRealMonkeyKing {
    SunWukong=1,//孫悟空
    SixEarMacaque=2//六耳獼猴
  }
  public interface IHandler
  {
    /// <summary>
    /// 判斷真假美猴王
    /// </summary>
    /// <param name="SunWukong">孫悟空</param>
    /// <param name="SixEarMacaque">六耳獼猴</param>
    /// <returns></returns>
    TheRealMonkeyKing Handler(string SunWukong, string SixEarMacaque);
    /// <summary>
    /// 指定下一個(gè)神仙來(lái)判斷真假美猴王
    /// </summary>
    IHandler NextHandler{get;set;}
  }
}

2. 神仙--觀音菩薩

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Com.Design.Gof.ChainOfResponsibility
{
  public class GuangYinBodhisattva:IHandler
  {
    /// <summary>
    /// 觀音菩薩 判斷真假美猴王
    /// </summary>
    /// <param name="SunWukong">孫悟空</param>
    /// <param name="SixEarMacaque">六耳獼猴</param>
    /// <returns></returns>
    public TheRealMonkeyKing Handler(string SunWukong, string SixEarMacaque){
      Console.WriteLine("觀音菩薩暗念《緊箍?jī)褐洹?,兩個(gè)一齊喊疼,菩薩無(wú)計(jì)奈何,突然想起李天王的照妖鏡,對(duì),交給他去辨別");
      return NextHandler.Handler(SunWukong,SixEarMacaque);
    }
    /// <summary>
    /// 指定下一路神仙 來(lái)判斷真假美猴王
    /// </summary>
    public IHandler NextHandler { get; set; }
  }
}

3. 神仙--托塔李天王

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Com.Design.Gof.ChainOfResponsibility
{
  public class LiTianWang : IHandler
  {
    /// <summary>
    /// 李天王 判斷真假美猴王
    /// </summary>
    /// <param name="SunWukong">孫悟空</param>
    /// <param name="SixEarMacaque">六耳獼猴</param>
    /// <returns></returns>
    public TheRealMonkeyKing Handler(string SunWukong, string SixEarMacaque)
    {
      Console.WriteLine("李天王取照妖鏡照住,鏡中乃是兩個(gè)孫悟空,毫發(fā)不差。玉帝亦辨不出,兩悟空大戰(zhàn)幾百回合,來(lái)到了唐僧那里");
      return NextHandler.Handler(SunWukong, SixEarMacaque);
    }
    /// <summary>
    /// 指定下一路神仙 來(lái)判斷真假美猴王
    /// </summary>
    public IHandler NextHandler { get; set; }
  }
}

4. 神仙--唐僧(其實(shí)現(xiàn)在還不算神仙)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Com.Design.Gof.ChainOfResponsibility
{
  public class TangSeng : IHandler
  {
    /// <summary>
    /// 唐僧 判斷真假美猴王
    /// </summary>
    /// <param name="SunWukong">孫悟空</param>
    /// <param name="SixEarMacaque">六耳獼猴</param>
    /// <returns></returns>
    public TheRealMonkeyKing Handler(string SunWukong, string SixEarMacaque)
    {
      Console.WriteLine(" 唐僧念《緊箍?jī)褐洹罚艘积R叫苦, 唐僧也不認(rèn)得真假,兩悟空打到閻羅殿,諦聽(tīng)出來(lái)辨別");
      return NextHandler.Handler(SunWukong, SixEarMacaque);
    }
    /// <summary>
    /// 指定下一路神仙 來(lái)判斷真假美猴王
    /// </summary>
    public IHandler NextHandler { get; set; }
  }
}

5. 神仙---閻羅殿諦聽(tīng)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Com.Design.Gof.ChainOfResponsibility
{
  public class YanLuoDianDiTing : IHandler
  {
    /// <summary>
    /// 閻羅殿的諦聽(tīng) 判斷真假美猴王
    /// </summary>
    /// <param name="SunWukong">孫悟空</param>
    /// <param name="SixEarMacaque">六耳獼猴</param>
    /// <returns></returns>
    public TheRealMonkeyKing Handler(string SunWukong, string SixEarMacaque)
    {
      Console.WriteLine("閻羅殿的諦聽(tīng)可以分辨的出真假, 卻不敢說(shuō)出來(lái),因?yàn)榱J猴的后臺(tái)很強(qiáng):如來(lái)是也");
      return NextHandler.Handler(SunWukong, SixEarMacaque);
    }
    /// <summary>
    /// 指定下一路神仙 來(lái)判斷真假美猴王
    /// </summary>
    public IHandler NextHandler { get; set; }
  }
}

6. 神仙--如來(lái)佛祖

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Com.Design.Gof.ChainOfResponsibility
{
  public class RuLai : IHandler
  {
    /// <summary>
    /// 唐僧 判斷真假美猴王
    /// </summary>
    /// <param name="SunWukong">孫悟空</param>
    /// <param name="SixEarMacaque">六耳獼猴</param>
    /// <returns></returns>
    public TheRealMonkeyKing Handler(string SunWukong, string SixEarMacaque)
    {
      Console.WriteLine(" 如來(lái)佛辨出真假,是所有神仙都沒(méi)有聽(tīng)說(shuō)過(guò)的新物種:六耳獼猴");
      //返回孫悟空,沒(méi)有NextHandler了
      return TheRealMonkeyKing.SunWukong;
      //還有人說(shuō)應(yīng)該返回TheRealMonkeyKing.SixEarMacaque,
      //因?yàn)榱J猴是如來(lái)佛的徒弟,用來(lái)除掉孫悟空,和菩提祖師斗智斗勇。這里打死的是真孫悟空。
      //另有一說(shuō)六耳獼猴是孫悟空心魔,用佛洛伊德心理學(xué)分析,孫悟空也有反抗的一面,其實(shí)還是一個(gè)孫悟空。
      //還有一說(shuō)是 六耳獼猴是真正的六耳獼猴,孫悟空也是真的孫悟空,
      //因?yàn)閷O悟空打死的是 六耳獼猴的本相,六耳獼猴沒(méi)必要變個(gè)猴子給人打死。
      //爭(zhēng)議性還是蠻多?!段饔斡洝愤€真是神作。
    }
    /// <summary>
    /// 指定下一路神仙 來(lái)判斷真假美猴王
    /// </summary>
    public IHandler NextHandler { get; set; }
  }
}

7. 判斷真假美猴王入口

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Com.Design.Gof.ChainOfResponsibility
{
  /// <summary>
  /// 判斷真假美猴王入口
  /// </summary>
  public class JudgementTheKingOfMonkey
  {
    //各路神仙都請(qǐng)來(lái),放一起
    public IHandler GuangYinBodhisattva { get; set; }
    public IHandler LiTianWang { get; set; }
    public IHandler TangSeng { get; set; }
    public IHandler YanLuoDianDiTing { get; set; }
    public IHandler RuLai { get; set; }
    /// <summary>
    /// 判斷真假美猴王,首先從觀音菩薩開(kāi)始
    /// </summary>
    /// <returns></returns>
    public TheRealMonkeyKing Judge(string SunWuKong,string SixEarMacaque) {
     return GuangYinBodhisattva.Handler(SunWuKong, SixEarMacaque);
    }
  }
}

8. 下面是主函數(shù)測(cè)試

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Com.Design.Gof.Observer;
using Com.Design.Gof.ChainOfResponsibility;
namespace Com.Design.Gof.Test
{
  class Program
  {
    static void Main(string[] args)
    {
      #region ChainOfResponsibility
      //判斷真假孫悟空,首先把各路神仙都new一下,讓他們先喝茶休息
      JudgementTheKingOfMonkey judgement = new JudgementTheKingOfMonkey
      {
        GuangYinBodhisattva = new GuangYinBodhisattva(),//觀音菩薩
        LiTianWang = new LiTianWang(),//托塔李天王
        TangSeng = new TangSeng(),//唐僧
        YanLuoDianDiTing = new YanLuoDianDiTing(),//閻羅殿諦聽(tīng)
        RuLai = new RuLai()//如來(lái)佛祖
      };
      //把各路神仙的責(zé)任劃分一下,各自指定下一個(gè)神仙是誰(shuí)
      //觀音菩薩-->托塔李天王-->唐僧-->閻羅殿諦聽(tīng)-->如來(lái)佛祖
      judgement.GuangYinBodhisattva.NextHandler = judgement.LiTianWang;
      judgement.LiTianWang.NextHandler = judgement.TangSeng;
      judgement.TangSeng.NextHandler = judgement.YanLuoDianDiTing;
      judgement.YanLuoDianDiTing.NextHandler = judgement.RuLai;
      //兩美猴王入場(chǎng)
      string SunWuKong = "SunWuKong", SixEarMacaque = "SixEarMacaque";
      //開(kāi)始判斷真假美猴王
      TheRealMonkeyKing RealMonkeyKing = judgement.Judge(SunWuKong, SixEarMacaque);
      Console.WriteLine();
      Console.WriteLine("Then,真正的美猴王是:" + RealMonkeyKing + "孫悟空");
      #endregion
      Console.ReadKey();
    }
  }
}

9. 運(yùn)行結(jié)果

附:完整實(shí)例代碼點(diǎn)擊此處本站下載。

更多關(guān)于C#相關(guān)內(nèi)容還可查看本站專題:《C#數(shù)據(jù)結(jié)構(gòu)與算法教程》、《C#窗體操作技巧匯總》、《C#常見(jiàn)控件用法教程》、《WinForm控件用法總結(jié)》、《C#數(shù)組操作技巧總結(jié)》及《C#面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程

希望本文所述對(duì)大家C#程序設(shè)計(jì)有所幫助。

相關(guān)文章

最新評(píng)論

元氏县| 封开县| 云阳县| 旬邑县| 河东区| 额济纳旗| 浮梁县| 景宁| 扎赉特旗| 钟祥市| 彩票| 弋阳县| 金堂县| 含山县| 蓬安县| 云阳县| 枞阳县| 和林格尔县| 犍为县| 江永县| 夏邑县| 瑞安市| 娄底市| 宁蒗| 沙湾县| 扶风县| 高密市| 西宁市| 阳山县| 循化| 故城县| 出国| 东海县| 台北市| 扎赉特旗| 丰原市| 镇安县| 女性| 武邑县| 巴彦淖尔市| 尉犁县|