`
HelloJimmy
  • 浏览: 35169 次
  • 性别: Icon_minigender_1
  • 来自: LostTemple
社区版块
存档分类
最新评论

责任链模式的一种变种

阅读更多
有关责任链模式请参考http://www.iteye.com/topic/343210

引言:此变种模式是主要根据面向对象的设计原则之一的“类的单一职责”和“开放和封闭原则”演变而来。

分析:原抽象处理者角色(Handler)是一个抽象类,代码一般如下:

# public abstract class Handler {  
#     protected Handler successor;  
#     protected String name;  
#   
#     public String getName() {  
#         return name;  
#     }  
#   
#     //处理请求,由子类完成   
#     public abstract void handleRequest(String request);  
#   
#     //设置下一个处理请求的人   
#     public void setNextHandler(Handler successor) {  
#         this.successor = successor;  
#     }  
# }  


通过分析我们可以发现其职责实际上有两个:
1.按照相应职责进行相应处理,即handleRequest方法;
2.设置下一个责任处理者;

现在我们企图把她的职责单一化,我们可以抽出两个接口,一个是处理请求接口,即:

public interface Processor {
   void process(Object request);
}


另外一个可以独立设置处理链条,即:
public interface Chain {
    void add(Processor p);
    void add(Processor p, int index);
    void remove(Processor p);
    void remove(Processor p, int index);
    Processor get(int index);
    int getCount();
}


最后,具体类实现这两个接口即可。


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics