該模式又稱為包裝模式碱璃,允許向一個(gè)現(xiàn)有的對象添加新的功能,同時(shí)又不改變其結(jié)構(gòu)勾效,就像一種裝飾一樣嘹悼,動(dòng)態(tài)的將功能附加到別的類中。其實(shí)這種模式比較常見层宫,例如Java中的io類就是利用了這種模式杨伙。一個(gè)簡單的輸入輸出流經(jīng)過包裝可以有各種功能。簡單實(shí)現(xiàn):
抽象類
public interface Beverage {
void make();
}
基本實(shí)現(xiàn)類(被裝飾對象)
public class Coffee implements Beverage{
@Override
public void make() {
System.out.println("make coffee");
}
}
裝飾者
public abstract class AdditivesBeverage implements Beverage{
private Beverage beverage;
public AdditivesBeverage(Beverage beverage){
this.beverage = beverage;
}
@Override
public void make() {
beverage.make();
}
}
裝飾者具體實(shí)現(xiàn)
public class AdvancedCoffee extends AdditivesBeverage {
public AdvancedCoffee(Beverage beverage) {
super(beverage);
}
private void addSugar(){
System.out.println("add sugar");
}
private void addMilk(){
System.out.println("add milk");
}
@Override
public void make() {
super.make();
addSugar();
addMilk();
}
}
測試類
public class test {
public static void main(String[] args) {
AdditivesBeverage beverage = new AdvancedCoffee(new Coffee());
beverage.make();
}
}