簡述:
- 學(xué)習(xí)裝飾者模式最大的體驗(yàn)是,對于傳統(tǒng)類的功能擴(kuò)展都是通過繼承來實(shí)現(xiàn)的,但是這種方式耦合度過高。
- 而裝飾者模式在不改變原有的業(yè)務(wù)類的前提下,更加靈活的擴(kuò)展業(yè)務(wù)。
- 類型-結(jié)構(gòu)性
具體代碼如下:
(1)普通業(yè)務(wù)實(shí)體類
public class SmallCake extends Cake{
public String describe(){
return "一個小蛋糕";
}
public int price(){
return 10;
}
}
(2)實(shí)體類的抽象
public abstract class Cake{
public abstract String describe(){}
public abstract int price(){}
}
(3)抽象裝飾類 (關(guān)鍵)
public abstract class DecoratorCake extend Cake{
private Cake cake;
public DecoratorCake(Cake cake){
this.cake = cake;
}
public String describe(){
return this.cake.describe();
}
public int price(){
return this.cake.price;
}
}
(4)具體裝飾類
public class AddChocolates extends DecoratorCake{
public AddChocolates(Cake cake){
super(cake);
}
public String describe(){
return super.describe()+"加了巧克力";
}
public int price(){
return super.price+10;
}
}
(5)測試
public class Test{
public static void main(String [] args){
Cake cake = new SmallCake();
cake = new AddChocolates();
}
}