1.什么是责任链模式 责任链模式就是将接受者对象连城一条链,并在该链上传递请求知道有一个接受者对象处理它。 通过让更多对象有机会处理请求,避免了请求发送者和接受者之间的耦合。 责任链模式中,作为请求接受者的多个对象通过对其后继的引用而连接起来的形成的一条链。 请求这这条链上传递,直到链上的某个接受者处理了这个请求,每个接受者都可以选择自行处理请求或是向 后继传递请求。 2.责任链模式如何解耦 发出请求的客户端并不知道链上的哪一个接受者会处理这个请求,从而实现了这个请求,从而实现了客户端和 接受者之间的解耦 3.责任链模式的应用 执行性能相对比较耗时,占用内存 4.责任链模式原理图:![]()
![]()
/* * 价格处理人,负责处理客户的折扣申请 * */ public abstract class PriceHandler { /* * 直接后继传递请求 * */ protected PriceHandler successor; public void setSuccessor(PriceHandler successor) { this.successor = successor; } /* * 处理折扣申请 * */ public abstract void PricesDiscount(float discount); }
public class SaleMan extends PriceHandler { /* * 销售员,处理小折扣 * */ @Override public void PricesDiscount(float discount) { if (discount <= 0.05) { System.out.println("可以出售"); }else { successor.PricesDiscount(discount); } } }
public class Manger extends PriceHandler { /* * 经理处理30%的折扣 * */ @Override public void PricesDiscount(float discount) { if (discount <= 0.30) { System.out.println("可以出售"); }else { successor.PricesDiscount(discount); } } }
public class Director extends PriceHandler { /* * 处理40%折扣 * */ @Override public void PricesDiscount(float discount) { if (discount <= 0.40) { System.out.println("可以出售"); }else { successor.PricesDiscount(discount); } } }
public class BigBoss extends PriceHandler { /* * 销售员,处理小折扣 * */ @Override public void PricesDiscount(float discount) { if (discount <= 0.50) { System.out.println("可以出售"); }else { System.out.println("不能出售"); } } }
public class PriceHandlerFactory { /* * 静态的工厂方法 * */ public static PriceHandler createPriceHandler() { PriceHandler sales = new SaleMan(); PriceHandler manger = new Manger(); PriceHandler director = new Director(); PriceHandler bigBoss = new BigBoss(); sales.setSuccessor(manger); manger.setSuccessor(director); director.setSuccessor(bigBoss); return sales; } }
public class Client { private PriceHandler mPriceHandler; public void setPriceHandler(PriceHandler priceHandler) { mPriceHandler = priceHandler; } public void requestDiscount(float discount){ mPriceHandler.PricesDiscount(discount); } }
主函数线程Client client = new Client(); client.setPriceHandler(PriceHandlerFactory.createPriceHandler()); Random rand = new Random(); for (int i = 0; i < 100; i++) { System.out.println(i+":"); client.requestDiscount(rand.nextFloat()); }
设计模式之责任链模式
最新推荐文章于 2024-12-11 23:04:59 发布