>  기사  >  Java  >  Java 디자인 패턴 프로그래밍에서 책임 사슬 패턴을 사용하는 예

Java 디자인 패턴 프로그래밍에서 책임 사슬 패턴을 사용하는 예

高洛峰
高洛峰원래의
2017-01-19 16:59:391148검색

책임 체인 모델: 여러 개체가 해당 개체의 참조에 의해 체인으로 연결되며, 요청은 체인의 수신 개체가 요청을 처리할 때까지 이 체인에서 전달됩니다. 요청하는 클라이언트는 체인에서 누가 궁극적으로 요청을 처리할지 모르기 때문에 시스템은 클라이언트에 영향을 주지 않고 동적으로 책임을 재구성하고 할당할 수 있으므로 요청 보낸 사람과 요청 처리기 간의 결합을 피할 수 있습니다.
책임 사슬에는 세 가지 역할이 있습니다.
1, 추상적 처리자 역할
2, 구체적 처리자 역할
3, 요청 발신자
작은 예: 집을 사고 싶다고 가정해 보겠습니다. 주택을 구입하려면 협상이 필요합니다. 주택 판매자의 입장에 따라 할인할 수 있는 가격도 다릅니다. 잠정적으로 결정합니다. * 풀뿌리 영업사원은 3% 할인만 가능 * 영업관리자 : 5% 할인 가능 * 영업이사 : 8% 할인 가능 * 상사(Boss) : 10% 할인 가능

Java 인스턴스
클래스 다이어그램:

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 중국어 웹사이트를 주목해주세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.