装饰者模式:(动态的将新功能附加到对象上。在对象功能扩展方面,它比继承更有弹性)
其别名为包装器(Wrapper);装饰模式是一种对象结构模式。
设计原则:对扩展开放、对修改关闭,这句话体现在我如果想扩展被装饰者类的行为,无须修改装饰者抽象类;只需继承装饰者抽象类,实现额外的一些装饰或者叫行为即可对被装饰者进行包装。
所以:扩展体现在继承、修改体现在子类中,而不是具体的抽象类,这充分体现了依赖倒置原则。
举例:
咖啡馆订单项目:
1)、咖啡种类:Espresso、ShortBlack、LongBlack、Decaf
2)、调料:Milk、Soy、Chocolate
3)、扩展性好、改动方便、维护方便
就如同调制一杯饮品:
主体:黑咖啡、浓缩黑咖啡、无咖啡因咖啡、意式浓缩咖啡
包装:牛奶、巧克力、豆浆
超类(被装饰者):
1 package com.java.jikexueyuan.coffeebar; 2 3 public abstract class Drink { 4 public String description=""; 5 private float price=0f;; 6 7 8 public void setDescription(String description) 9 { 10 this.description=description; 11 } 12 13 public String getDescription() 14 { 15 return description+"-"+this.getPrice(); 16 } 17 public float getPrice() 18 { 19 return price; 20 } 21 public void setPrice(float price) 22 { 23 this.price=price; 24 } 25 public abstract float cost(); 26 27 }