[同系列文章]
1.设计模式学习笔记(一)- -策略模式
2.设计模式学习笔记(二)- -观察者模式
我又来了,续更ヾ(◍°∇°◍)ノ゙,接下来的内容是观察者模式的学习笔记
以下正文ヽ( ̄▽ ̄)ノ)
装饰者模式
装饰者模式 动态地将责任附加到对象上。若要拓展功能,装饰者提供了比继承更加富有弹性的替代方案。
先大概看看下面的几张图,帮助恢复记忆~
类图:
思路:以咖啡为例子,首先撸一个 咖啡的抽象类 以及 一个 调味抽象类(继承了咖啡抽象类的),然后实现咖啡的具体类,实现调味的具体类~~
上个代码帮助理解:
//咖啡的抽象类
public abstract class Coffee{
String des = "UnKown";
public String getDes(){
return des ;
}
public abstract double cost();
}
//继承咖啡的调味料抽象类
public abstract class Condiment extends Coffee{
public abstract String getDes();
//关键点:所有的调味料子类都要重新实现这个描述方法;
//原因,让描述更加清晰,得到出完整的 咖啡--调味 链条;
}
//继承咖啡的具体类
public class MiaoshiCoffee extends Coffee{
public MiaoshiCoffee (){
des = "MiaoshiCoffee" ;
}
public double cost(){
return 25.99;
}
}
//继承调味料的具体类
public class Salt extends Condiment{
Coffee coffee;
public Salt(Coffee coffee){
this.coffee = coffee;
}
public String getDes(){
return coffee.getDes()+",Salt";
}
public double cost(){
return coffee.cost()+2.99;
}
}
public class Test{
public void main(){
Coffee coffee = new MiaoshiCoffee();
//可以不装饰,直接coffee.getDes();coffee.cost();
//要装饰,那么就直接new一个咯,把当前的coffee传给新对象
coffee = new Salt(coffee);//加盐
coffee = new Salt(coffee);//加第两份盐
coffee = new Other(coffee);//当然,也可以再加别的
//可以简写为:
//Coffee coffee = new Other(new Salt(new Salt(new MiaoshiCoffee())));
//最新的的装饰者放最外面~~
coffee.getDes();//获取描述
coffee.cost();//获取花费的金额
}
}
总结:像洋葱一样,一层一层的剥开你的心~完结。2333,不是很难,认真看书消化吧