国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#設計模式之ChainOfResponsibility職責鏈模式解決真假美猴王問題實例

2020-01-24 00:28:27
字體:
來源:轉載
供稿:網友

本文實例講述了C#設計模式之ChainOfResponsibility職責鏈模式解決真假美猴王問題。分享給大家供大家參考,具體如下:

一、理論定義

職責鏈模式 向一個 對象提出一個請求,如果這個對象無法處理這個請求,將指定下一個對象來處理這個請求, 直到這個請求能得到處理為止。

二、應用舉例

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

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

① 觀音菩薩(GuangYinBodhisattva)暗念《緊箍兒咒》,兩個一齊喊疼,菩薩無計奈何。
② 李天王(LiTianWang)取照妖鏡照住,鏡中乃是兩個孫悟空,毫發不差。玉帝亦辨不出。
③唐僧(TangSeng)念《緊箍兒咒》,二人一齊叫苦,唐僧也不認得真假。
④ 閻羅殿的諦聽(YanLuoDianDiTing)可以分辨的出真假,卻不敢說出來。
⑤ 最后被如來(RuLai)佛辨出真假,是所有神仙都沒有聽說過的新物種:六耳獼猴。

三、具體編碼

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

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>    /// 指定下一個神仙來判斷真假美猴王    /// </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("觀音菩薩暗念《緊箍兒咒》,兩個一齊喊疼,菩薩無計奈何,突然想起李天王的照妖鏡,對,交給他去辨別");      return NextHandler.Handler(SunWukong,SixEarMacaque);    }    /// <summary>    /// 指定下一路神仙 來判斷真假美猴王    /// </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("李天王取照妖鏡照住,鏡中乃是兩個孫悟空,毫發不差。玉帝亦辨不出,兩悟空大戰幾百回合,來到了唐僧那里");      return NextHandler.Handler(SunWukong, SixEarMacaque);    }    /// <summary>    /// 指定下一路神仙 來判斷真假美猴王    /// </summary>    public IHandler NextHandler { get; set; }  }}

4. 神仙--唐僧(其實現在還不算神仙)

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(" 唐僧念《緊箍兒咒》,二人一齊叫苦, 唐僧也不認得真假,兩悟空打到閻羅殿,諦聽出來辨別");      return NextHandler.Handler(SunWukong, SixEarMacaque);    }    /// <summary>    /// 指定下一路神仙 來判斷真假美猴王    /// </summary>    public IHandler NextHandler { get; set; }  }}

5. 神仙---閻羅殿諦聽

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

6. 神仙--如來佛祖

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(" 如來佛辨出真假,是所有神仙都沒有聽說過的新物種:六耳獼猴");      //返回孫悟空,沒有NextHandler了      return TheRealMonkeyKing.SunWukong;      //還有人說應該返回TheRealMonkeyKing.SixEarMacaque,      //因為六耳獼猴是如來佛的徒弟,用來除掉孫悟空,和菩提祖師斗智斗勇。這里打死的是真孫悟空。      //另有一說六耳獼猴是孫悟空心魔,用佛洛伊德心理學分析,孫悟空也有反抗的一面,其實還是一個孫悟空。      //還有一說是 六耳獼猴是真正的六耳獼猴,孫悟空也是真的孫悟空,      //因為孫悟空打死的是 六耳獼猴的本相,六耳獼猴沒必要變個猴子給人打死。      //爭議性還是蠻多。《西游記》還真是神作。    }    /// <summary>    /// 指定下一路神仙 來判斷真假美猴王    /// </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  {    //各路神仙都請來,放一起    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>    /// 判斷真假美猴王,首先從觀音菩薩開始    /// </summary>    /// <returns></returns>    public TheRealMonkeyKing Judge(string SunWuKong,string SixEarMacaque) {     return GuangYinBodhisattva.Handler(SunWuKong, SixEarMacaque);    }  }}

8. 下面是主函數測試

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(),//閻羅殿諦聽        RuLai = new RuLai()//如來佛祖      };      //把各路神仙的責任劃分一下,各自指定下一個神仙是誰      //觀音菩薩-->托塔李天王-->唐僧-->閻羅殿諦聽-->如來佛祖      judgement.GuangYinBodhisattva.NextHandler = judgement.LiTianWang;      judgement.LiTianWang.NextHandler = judgement.TangSeng;      judgement.TangSeng.NextHandler = judgement.YanLuoDianDiTing;      judgement.YanLuoDianDiTing.NextHandler = judgement.RuLai;      //兩美猴王入場      string SunWuKong = "SunWuKong", SixEarMacaque = "SixEarMacaque";      //開始判斷真假美猴王      TheRealMonkeyKing RealMonkeyKing = judgement.Judge(SunWuKong, SixEarMacaque);      Console.WriteLine();      Console.WriteLine("Then,真正的美猴王是:" + RealMonkeyKing + "孫悟空");      #endregion      Console.ReadKey();    }  }}

9. 運行結果

附:完整實例代碼點擊此處本站下載

更多關于C#相關內容還可查看本站專題:《C#數據結構與算法教程》、《C#窗體操作技巧匯總》、《C#常見控件用法教程》、《WinForm控件用法總結》、《C#數組操作技巧總結》及《C#面向對象程序設計入門教程

希望本文所述對大家C#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 仁布县| 新乐市| 潜山县| 天津市| 元氏县| 利津县| 贵港市| 岳普湖县| 资源县| 新巴尔虎右旗| 财经| 辉南县| 原阳县| 舞阳县| 江阴市| 普安县| 中牟县| 孝义市| 百色市| 吴旗县| 陵川县| 汶上县| 炎陵县| 通山县| 滦平县| 临猗县| 新野县| 全椒县| 柳河县| 永昌县| 岫岩| 泾川县| 乐山市| 宜黄县| 读书| 金堂县| 韩城市| 和平区| 江孜县| 奎屯市| 锦屏县|