`
TRAMP_ZZY
  • 浏览: 132783 次
社区版块
存档分类
最新评论

设计模式-责任链模式模式

阅读更多

定义:使多个对象有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象练成一条链,并沿着这条链传递该请求。




public abstract class Handler {
	public final static int FATHER_LEVEL_REQUEST = 1;
	public final static int HUSBAND_LEVEL_REQUEST = 2;
	public final static int SON_LEVEL_REQUEST = 3;
	
	private int level = 0;
	private Handler nextHandler;
	
	public Handler(int level) {
		this.level = level;
	}
	
	public final void handleMessage(IWomen women) {
		if (women.getType() == this.level) {
			this.response(women);
		} else {
			if (this.nextHandler != null) {
				this.nextHandler.handleMessage(women);
			} else {
				System.out.println("no place to request");
			}
		}
	}
	
	public void setNext(Handler handler) {
		this.nextHandler = handler;
	}
	
	protected abstract void response(IWomen women);
}

public class Father extends Handler {

	public Father() {
		super(Handler.FATHER_LEVEL_REQUEST);
	}

	@Override
	protected void response(IWomen women) {
		System.out.println("daughter to father :");
		System.out.println(women.getRequest());
		System.out.println("Father's answer is yes.");
	}

}

public class Husband extends Handler {

	public Husband() {
		super(Handler.HUSBAND_LEVEL_REQUEST);
	}

	@Override
	protected void response(IWomen women) {
		System.out.println("wife to husband : ");
		System.out.println(women.getRequest());
		System.out.println("husband's answer is yes.");
	}

}

public class Son extends Handler {

	public Son() {
		super(Handler.SON_LEVEL_REQUEST);
	}

	@Override
	protected void response(IWomen women) {
		System.out.println("Mother to son : ");
		System.out.println(women.getRequest());
		System.out.println("the son's answer is yes.");
	}

}

public interface IWomen {
	public int getType();
	public String getRequest();
}

public class Women implements IWomen {

	private int type = 0;
	private String request;
	
	public Women(int type, String request) {
		this.type = type;
		switch (this.type) {
			case 1 : {
				this.request = "daughter's request is : " + request;
				break;
			}
			case 2: {
				this.request = "wife's request is : " + request;
				break;
			}
			case 3: {
				this.request = "mother's request is : " + request;
				break;
			}
		}
	}
	
	@Override
	public int getType() {
		return this.type;
	}

	@Override
	public String getRequest() {
		return this.request;
	}

}

public class Client {

	public static void main(String[] args) {
		Random rand = new Random();
		ArrayList<IWomen> arr = new ArrayList<>();
		for (int i=0; i<5; i++) {
			arr.add(new Women(rand.nextInt(4), "I want to go shopping."));
		}
		
		Handler father = new Father();
		Handler husband = new Husband();
		Handler son = new Son();
		
		father.setNext(husband);
		husband.setNext(son);
		
		for (IWomen women : arr) {
			father.handleMessage(women);
		}
	}

}




  • 大小: 30.2 KB
  • 大小: 12.3 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics