책임 체인 모델: 여러 개체가 해당 개체의 참조에 의해 체인으로 연결되며, 요청은 체인의 수신 개체가 요청을 처리할 때까지 이 체인에서 전달됩니다. 요청하는 클라이언트는 체인에서 누가 궁극적으로 요청을 처리할지 모르기 때문에 시스템은 클라이언트에 영향을 주지 않고 동적으로 책임을 재구성하고 할당할 수 있으므로 요청 보낸 사람과 요청 처리기 간의 결합을 피할 수 있습니다.
책임 사슬에는 세 가지 역할이 있습니다.
1, 추상적 처리자 역할
2, 구체적 처리자 역할
3, 요청 발신자
작은 예: 집을 사고 싶다고 가정해 보겠습니다. 주택을 구입하려면 협상이 필요합니다. 주택 판매자의 입장에 따라 할인할 수 있는 가격도 다릅니다. 잠정적으로 결정합니다. * 풀뿌리 영업사원은 3% 할인만 가능 * 영업관리자 : 5% 할인 가능 * 영업이사 : 8% 할인 가능 * 상사(Boss) : 10% 할인 가능
Java 인스턴스
클래스 다이어그램:
/** * 抽象责任 */ public abstract class IFilter { private IFilter successor; public IFilter getSuccessor() { return successor; } public void setSuccessor(IFilter successor) { this.successor = successor; } public abstract void handleFilter(); public abstract void handleFilter2(); }
/** * 具体责任 */ public class ConcreteFilter extends IFilter { private String name; public ConcreteFilter(String name) { this.name = name; } @Override public void handleFilter() { /* * 自己先处理,如有后继者,再由它处理一次 */ System.out.println(name + " 处理了请求"); if (getSuccessor() != null) { getSuccessor().handleFilter(); } } @Override public void handleFilter2() { /* * 有后继者就后继者处理, 否则自己处理 */ if (getSuccessor() != null) { getSuccessor().handleFilter2(); } else { System.out.println(name + " 处理了请求"); } } }
public class Test { public static void main(String[] args) { IFilter filter1 = new ConcreteFilter("permission-filter");//权限过滤 IFilter filter2 = new ConcreteFilter("suffix-filter");//后缀名过滤 IFilter filter3 = new ConcreteFilter("style-filter");//风格过滤 filter1.setSuccessor(filter2); filter2.setSuccessor(filter3); System.out.println("------以下是每一个处理者(包括后继者)都处理了, 顺序也是一级一级的传递------"); filter1.handleFilter(); System.out.println("------以下是交由最后一个后继者处理------"); filter1.handleFilter2(); } }
인쇄:
------以下是每一个处理者(包括后继者)都处理了, 顺序也是一级一级的传递------ permission-filter 处理了请求 suffix-filter 处理了请求 style-filter 处理了请求 ------以下是交由最后一个后继者处理------ style-filter 处理了请求
Java 디자인 패턴 프로그래밍에서 책임 사슬 패턴 사용에 대한 더 많은 예를 보려면 다음을 참조하세요. PHP 중국어 웹사이트를 주목해주세요!