C\#디자인 모델 의 ChainOf Responsibility 직책 체인 모델 해결 진위 미 원숭이 왕 문제 실례
이론 적 정의
직책 체인 모드 는 한 대상 에 게 요청 을 합 니 다.만약 에 이 대상 이 이 요 구 를 처리 할 수 없다 면 다음 대상 을 지정 하여 이 요 구 를 처리 할 것 입 니 다.이 요청 이 처 리 될 때 까지.
2.예 를 들 어
수요 설명:에서 진위 미 원숭이 왕 의 판별 과정
여섯 귀 히 말 라 야 원숭이 와 손오공 은 외형 이 똑 같 을 뿐만 아니 라 능력 도 똑 같 아서 어디 를 가도 누가 진짜 인지,누가 가짜 인지 분간 할 수 없다!
① 관음 보살(GuangyinBodhisattva)은 을 몰래 읽 고 두 사람 이 함께 아픔 을 외 치 며 보살 은 어 쩔 수 없다.
② 이 천 왕(LiTianWang)은 요경 을 받 아 비 추 는데 거울 속 에 두 손오공 이 있어 서 조금도 차이 가 없다.옥황상제 도 분간 할 수 없다.
③ 당나라 승려(TangSeng)가 을 읽 고 두 사람 이 함께 고통 을 호소 하 며 당나라 승려 들 도 진 위 를 모른다.
④ 염라 전의 자세 한 이 야 기 를 들 으 면 진 위 를 가 릴 수 있 지만 말 을 하지 못 한다.
⑤ 마지막 에 여래(RuLai)불 에 의 해 진 위 를 가 려 내 고 모든 신선 들 이 듣 지 못 한 새로운 종 류 였 다.여섯 귀 히 말 라 야 원숭이.
3.구체 적 인 코딩
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\#프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.