該模式又稱為包裝模式,允許向一個現(xiàn)有的對象添加新的功能,同時又不改變其結(jié)構(gòu),就像一種裝飾一樣,動態(tài)的將功能附加到別的類中。其實這種模式比較常見,例如Java中的io類就是利用了這種模式。一個簡單的輸入輸出流經(jīng)過包裝可以有各種功能。簡單實現(xiàn):
抽象類
public interface Beverage {
void make();
}
基本實現(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();
}
}
裝飾者具體實現(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();
}
}