净谦

导航

责任链模式

package behaviroal.chain;

/**
 * 责任链模式
 *
 * 感觉就是单向链表
 * 避免请求发送者与接受者耦合在一起,让多个对象连接成一条链,
 * 并且沿着这条链传递请求,直到有对象处理他为止
 * @author zhangchy
 *
 *降低了发出请求的对象和处理请求对象之间的耦合。
 * 允许多于一个的处理者对象根据自己的逻辑来决定哪一个处理者最终处理这个请求
 * 发出命令的请求只是把请求传给链结构的初始者,而不需要知道哪一个节点处理了这个请求
 *
 */

class Task{
 private String type;

 public String getType() {
  return type;
 }

 public void setType(String type) {
  this.type = type;
 }
}

abstract class Hander{
 //保护类 ,对下家的引用
 protected Hander hander;
 
 public void setHander(Hander hander) {
  this.hander = hander;
 }
 
 public abstract void operation(Task t);
}

//首先是职员
class Clerk extends Hander{

 @Override
 public void operation(Task t) {
  // TODO Auto-generated method stub
  if(t.getType().toString().trim().equals("C")){
   System.out.println("这是我作为职员的责任");
  }
  else {
   System.out.println("这个活职员干不了,找我上司把");
   hander.operation(t);
  }
 }
}

//职员上司部长
class Minister extends Hander{
 @Override
 public void operation(Task t) {
  // TODO Auto-generated method stub
  if(t.getType().toString().trim().equals("M")){
   System.out.println("这是我作为部长的责任");
  }
  else {
   System.out.println("这个活部长干不了,找我上司把");
   hander.operation(t);
  }
 }
}

//公司经理
class Boss extends Hander{
 @Override
 public void operation(Task t) {
  // TODO Auto-generated method stub
  if(t.getType().toString().trim().equals("B")){
   System.out.println("这是我作为经理的责任");
  }
  else {
   System.out.println("这个活干不了");
  }
 }
}

public class ChainPattern {
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Clerk c = new Clerk();
  Minister m = new Minister();
  Boss b = new Boss();
  
  //c的下家是m
  c.setHander(m);
  //m的下家是b
  m.setHander(b);
  
  Task t  = new Task();
  t.setType("B");
  c.operation(t);
 }
}

posted on 2012-03-15 10:29  康安V  阅读(117)  评论(0)    收藏  举报