行为型模式,共11种
(1)责任链模式
将接收者对象连成一条链,并在该链上传递请求对象,直到有一个接收者处理该请求对象。该请求对象事先不知道是由哪一个接收者对象处理的。
public abstract class PriceHandler { //直接后继,用于传递请求 protected PriceHandler successor; public void setSuccessor(PriceHandler successor){ this.successor = successor; } //处理折扣申请 public abstract void processDiscount(float discount); } public class Sales extends PriceHandler { @Override public void processDiscount(float discount) { if(discount <= 0.05) { System.out.format("%s批准了折扣:%.2f\n", this.getClass().getName(),discount); } else { successor.processDiscount(discount); } } } public class Manager extends PriceHandler { @Override public void processDiscount(float discount) { if(discount <= 0.3) { System.out.format("%s批准了折扣:%.2f\n", this.getClass().getName(),discount); } else { successor.processDiscount(discount); } } } public class CEO extends PriceHandler { @Override public void processDiscount(float discount) { if(discount <= 0.5) { System.out.format("%s批准了折扣:%.2f\n", this.getClass().getName(),discount); } else { System.out.format("%s拒绝了折扣:%.2f\n", this.getClass().getName(),discount); } } } public class PriceHandlerFactory { //创建PriceHandler的工厂函数 public static PriceHandler createPricHandler() { // TODO Auto-generated method stub PriceHandler sales= new Sales(); PriceHandler manager= new Manager(); PriceHandler ceo= new CEO(); sales.setSuccessor(manager); manager.setSuccessor(ceo); return sales; } } public class Customer { private PriceHandler pricHandler; public void setPriceHandler(PriceHandler pricHandler) { this.pricHandler = pricHandler; } public void requestDiscount(float discount) { pricHandler.processDiscount(discount); } } public class MainClass { public static void main(String[] args) { // TODO Auto-generated method stub Customer customer = new Customer(); customer.setPriceHandler(PriceHandlerFactory.createPricHandler()); Random rand = new Random(); for(int i=0;i<10;i++) { System.out.print(i+":"); customer.requestDiscount(rand.nextFloat()); } } }
原文:https://www.cnblogs.com/moris5013/p/11562237.html