public class PayAmountContext { // 依赖倒置原则,面向接口编程 // 客户端需要设置自己想要使用的具体策略类,因此需要客户端对策略类有具体的了解,这点也是策略设计模式的不足之处 private PayAmountStrategy payAmountStrategy; public PayAmountContext(/*PayAmount payAmount*/) { /*this.payAmount = payAmount;*/ } public void setPayAmount(PayAmountStrategy payAmountStrategy) { this.payAmountStrategy = payAmountStrategy; } public double payAmount(Object param) { return this.payAmountStrategy.payAmount(param); } }
时间: 2023-07-16 09:12:03 浏览: 71
PHP面向对象五大原则之接口隔离原则(ISP)详解
这段代码实现了策略模式,通过将具体算法实现封装到不同的策略类中,使得客户端可以根据需要动态地选择不同的策略类。其中,PayAmountContext类扮演了上下文角色,负责与客户端交互,维护一个对PayAmountStrategy接口的引用,以便于动态地设置具体的策略类。当客户端需要调用具体的算法时,只需要调用PayAmountContext的payAmount方法即可,该方法内部会调用当前设置的PayAmountStrategy的payAmount方法来计算费用。这样,当需要增加新的算法时,只需要实现PayAmountStrategy接口,并在客户端动态设置即可,无需修改原有代码,符合开闭原则。但是,该模式的缺点是客户端需要对策略类有具体的了解,如果策略类过多或者复杂,客户端的维护成本会增加。
阅读全文