C++ 디자인 패턴 프로그래밍에서 책임 사슬 패턴 적용에 대한 자세한 설명

高洛峰
풀어 주다: 2017-01-19 17:01:36
원래의
1334명이 탐색했습니다.

책임 사슬 패턴: 여러 개체가 요청을 처리할 수 있는 기회를 갖도록 하여 요청 발신자와 수신자 간의 결합 관계를 피합니다. 이러한 개체는 체인으로 연결되며 요청은 개체가 처리할 때까지 체인을 따라 전달됩니다.

직원들의 급여 인상 요청을 고려하는 등 아이디어는 매우 간단합니다. 회사에는 부장, 이사, 과장의 세 직급이 있으며, 직원이 급여 인상을 요구할 경우, 급여 인상 금액이 관리자의 권한 범위 내인 경우 담당 관리자에게 신청해야 합니다. 직접 승인하지 않으면 직원이 책임자에게 제출합니다. Director도 마찬가지입니다. General Manager는 모든 요청을 처리할 수 있습니다. 이는 일반적인 책임 체인 모델입니다. 요청 처리는 개체가 요청을 처리할 때까지 체인을 형성합니다. 이 예에는 UML 다이어그램이 제공됩니다.

UML 구조 다이어그램:

C++ 디자인 패턴 프로그래밍에서 책임 사슬 패턴 적용에 대한 자세한 설명

책임 사슬 모델의 예
*이 예는 세 가지 유형의 영업사원이 주문을 처리하는 상황입니다.
*주문 금액이 1000원 미만인 경우 1차 영업사원이 주문 처리 가능
* 주문 금액이 10000원 미만인 경우 2차 영업사원이 주문 처리 가능
* 주문 금액이 100000 미만인 경우 3단계 영업 사원이 주문을 처리할 수 있습니다.

using System; 
  
/**//// <summary> 
///售货员接口,所有类型的售货员必须实现该接口 
/// </summary> 
interface ISalesMan 
{ 
  string Name {set;get;} //售货员名字 
  void SetNext(ISalesMan nextSalesMan); //设置下一级售货员 
  void Process(Order order); //处理订单 
} 
  
/**//// <summary> 
/// 订单类 
/// </summary> 
class Order 
{ 
  private int orderAmount; 
  
  public int Amount 
  { 
    set{ this.orderAmount = value;} 
    get{ return this.orderAmount; } 
  } 
} 
  
/**//// <summary> 
/// 一类售货员 
/// </summary> 
class FirstSalesMan : ISalesMan 
{ 
  private ISalesMan nextSalesMan = null; 
  private string name = string.Empty; 
  
  ISalesMan 成员ISalesMan 成员 
} 
  
/**//// <summary> 
/// 二类售货员 
/// </summary> 
class SecondSalesMan : ISalesMan 
{ 
  private ISalesMan nextSalesMan = null; 
  private string name = string.Empty; 
  
  ISalesMan 成员ISalesMan 成员 
} 
  
/**//// <summary> 
/// 三类售货员 
/// </summary> 
class ThirdSalesMan : ISalesMan 
{ 
  private ISalesMan nextSalesMan = null; 
  private string name = string.Empty; 
  
  ISalesMan 成员ISalesMan 成员 
} 
  
class Client 
{ 
  public static void Main(string[] args) 
  { 
    FirstSalesMan first = new FirstSalesMan(); 
    first.Name = "firstMan"; 
  
    SecondSalesMan second = new SecondSalesMan(); 
    second.Name = "secondMan"; 
  
    ThirdSalesMan third = new ThirdSalesMan(); 
    third.Name = "thirdMan"; 
  
    first.SetNext(second); 
    second.SetNext(third); 
  
    Order o = new Order(); 
    o.Amount = 300; 
    first.Process(o); 
  
    o = new Order(); 
    o.Amount = 1300; 
    first.Process(o); 
  
    o = new Order(); 
    o.Amount = 11300; 
    first.Process(o); 
  
    Console.Read(); 
  } 
}
로그인 후 복사

책임 사슬 모델에 적용 가능한 시나리오

요청을 처리할 수 있는 개체가 여러 개 있습니다. , 요청을 처리하는 개체는 런타임 시 자동으로 결정됩니다.

수신자를 명시적으로 지정하지 않고 여러 개체 중 하나에 요청을 제출하려고 합니다.

요청을 처리할 수 있는 개체 컬렉션은 동적으로 지정되어야 합니다.

C++ 디자인 패턴 프로그래밍에서 책임 사슬 패턴 적용에 대한 자세한 설명은 PHP 중국어 웹사이트를 참고하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!