定义 装饰者模式: 动态的将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。 Java实现 背景 制作咖啡时,不同的调料搭配不同的咖啡,动态的计算价钱。 超类 饮料类 public abstract class Beverage { String description = "Unknown Beverage"; public String getDescription() { return description; } /** * 功能描述: 价钱 * * @return double * @author liyf */ public abstract double cost(); } 具体咖啡类 需要为具体的咖啡设置描述,而且还必须实现cost()方法 浓缩咖啡 public class Espresso extends Beverage { public Espresso() { description = "Espresso"; } @Override public double cost() { return 1.99; } } 综合咖啡 pub.... 装饰者模式 设计模式
设计原则 找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。 针对接口编程,而不是针对实现编程。 针对接口编程真正的意思时"针对超类型(supertype)编程" 多用组合,少用继承 为了交互对象之间的松耦合设计而努力。 松耦合的设计之所以能让我们建立有弹性的OO系统,能够应对变化,是因为对象之间的互相依赖降到了最低。 类应该对扩展开放,对修改关闭 依赖倒置原则:要依赖抽象,不要依赖具体类。 指导方针: 变量不可以持有具体类的引用 不要让类派生自具体类 不要覆盖基类中已实现的方法 应尽量达到这个原则,而不是随时都要遵循这个原则 Head First 设计原则 设计模式
策略模式 定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。 Java实现 模拟鸭子应用,不同鸭子有不同的行为 策略接口及实现 飞行行为 接口 public interface FlyBehavior { void fly(); } 不同实现 public class FlyWithWings implements FlyBehavior { @Override public void fly() { System.out.println("I'm flying"); } } public class FlyNoWay implements FlyBehavior { @Override public void fly() { System.out.println("I can't fly"); } } public class FlyRocketPowered implements FlyBehavior { @Override public void fly() { System.out.println("I'm flying wit.... 策略模式 设计模式