정의 : 책임 패턴의 체인은 요청에 대한 수신기 개체의 체인을 만듭니다. 이 패턴은 요청 유형을 제공하여 요청의 발신자와 수신자를 분리합니다. 이 유형의 디자인 패턴은 행동 패턴에 속합니다. 이 모드에서 일반적으로 각 수신자는 다른 수신자에 대한 참조를 포함합니다. 객체가 요청을 처리 할 수없는 경우 동일한 요청을 다음 수신기 등으로 전달합니다.
특징 : 1. 커플 링 정도를 줄입니다. 요청의 발신자와 수신자를 분리합니다.
2. 객체를 단순화했습니다. 이것은 체인의 구조를 알기 위해 물체를 필요로하지 않습니다.
3. 대상에 책임을 할당하는 유연성을 향상시킵니다. 체인의 구성원을 변경하거나 주문을 동원함으로써 동적 추가 또는 책임을 삭제할 수 있습니다.
4. 새로운 요청 처리 클래스를 추가하는 것이 매우 편리합니다.
엔터프라이즈 수준 개발 및 일반적으로 사용되는 프레임 워크의 응용 프로그램 : 스프링, 스트럿 인터셉터, 서블릿 필터
구체적인 예 :
/** * 여기 회사 휴가의 예는 다음과 같습니다. * 1. 누군가가 휴가 (이벤트) *2를 취합니다. 프로젝트 팀 리더의 승인 : 승인은 3 일 미만의 승인을받을 수 있으며 3 일 이상 상사에게*3을 요청합니다. 부서 감독자의 승인 : 승인은 10 일 미만의 승인을받을 수 있으며 10 일 이상 상사에게*4를 요청합니다. 제너럴 매니저의 승인 : 승인은 30 일 미만으로 승인 될 수 있으며 30 일 이상 승인되지 않습니다*/public class demo {public static void main (String [] args) {이벤트 이벤트 = 새 이벤트 ( "프로그래머", 32, "친척을 방문하기 위해 고향으로 돌아 가기"); 리더 A = 새로운 Groupleader ( "Zhang San"); 리더 B = 새로운 관리자 ( "Li Si"); 리더 C = New General -Manager ( "Wang Wu"); // 책임 체인 모드를 지정합니다. A.SetNextLeader (b); B.setNextLeader (C); A. 핸들러 (이벤트); }}/*** 책임 체인의 특정 처리 이벤트*이 인스턴스는 휴가*/클래스 이벤트 {개인 문자열 이름; 사적인 int 일; 개인 문자열 이유; 공개 이벤트 (문자열 이름, int 일, 문자열 이유) {super (); this.name = 이름; this.days = days; this.reason = 이유; } public String getName () {return name; } public void setName (문자열 이름) {this.name = 이름; } public int getDays () {반환 일; } public void setDays (int days) {this.days = days; } public string getReason () {return resaul; } public void setReason (문자열 이유) {this.Reason = 이유; }}/*** 추상 책임 체인 객체, 다음의 모든 실제 책임 체인 객체는이 개체에서 상속됩니다*/Abstract Class 리더 {private String name; 보호 리더 NextLeader; // 책임 체인의 다음 책임 대상, 이것은 책임의 체인을 공개 리더 (문자열 이름) {super (); this.name = 이름; } public void setnextLeader (리더 NextLeader) {this.nextLeader = NextLeader; } public String getName () {return name; } public void setName (문자열 이름) {this.name = 이름; } 보호 된 초록 void handler (이벤트 이벤트);}/*** 휴가 프로세스의 첫 번째 개체, 그룹 리더*/클래스 그로 플레더는 리더 {public groufleader (문자열 이름) {super (name); } 보호 된 void handler (이벤트 이벤트) {if (event.getDays () <3) { System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 휴가 이유 : " + event.getReason () +"| "); System.out.println ( "승인 :"+this.getName ()+"(그룹 리더), Pass!"); System.out.println (); } else {system.out.println (this.getName ()+"(감독자), 권한 없음!"); this.nextLeader.handler (이벤트); }}}/*** 휴가 프로세스의 두 번째 개체, 부서 관리자*/클래스 관리자는 리더 {public manager (문자열 이름) {super (name); } 보호 된 void handler (이벤트 이벤트) {if (event.getDays () <10) { System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- System.out.println (this.getName ()+"(제너럴 매니저), this.nextLeader.Handler (event)}}; 30){ System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ offender: "+event.getName ()+"| "); System.out.println ("휴가 수 : "+event.getDays ()+"days "+"| "); System.out.println ("| 떠나기 : "+event.getReason () |"); System.out.println ( "approver :"+this.getname ()+"(일반 관리자)"; System.out.println("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- The leave requester: "+event.getName ()+"| "; System.out.println ("휴가 수 : "+event.getDays ()+"| "); System.out.println ("| event.getReason ()+"|"); System.Println ( "+thistoval. "); system.out.println ();}}}책임 체인 모델은 주로 프로세스 제어와 같은 개발에 사용됩니다. IF-ELSE 모델과 비교하여 코드 수정 및 통합의 효율이 높아서 코드 유지 보수에 더 도움이됩니다. 또한 책임 체인에 객체를 추가해야 할 경우 특정 책임 체인 클래스를 구현 한 다음 책임 객체를 만들고 더 큰 오버 헤드없이 책임 체인 관계를 유지해야합니다. 또한 실제 설계에서 여러 번 책임 체인의 유지 보수는 구성 파일에서 수행되므로 더 많은 개발 시간을 절약 할 수 있습니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.