Java 设计模式之装饰者模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chennai1101/article/details/84859767

本文为笔者学习《Head First设计模式》的笔记,并加入笔者自己的理解和归纳总结

装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。

结构图
在这里插入图片描述

鸡尾酒Cocktail一般以伏特加(Vodka)、威士忌(Whisky)等烈酒或是葡萄酒作为基酒,再配以柠檬汁(LemonJuice)、石榴汁(PomegranateJuice)、蒸馏水(DistilledWater)、冰块(IceBlock)等其他辅助材料,加以搅拌或摇晃而成的一种饮料。

public interface Cocktail {
    String getDescription();
}

public class Vodka implements Cocktail {

    @Override
    public String getDescription() {		
        return "Vodka";
    }

}

public class Whisky implements Cocktail {

@Override
    public String getDescription() {
        return "Whisky";
    }

}

抽象装饰类(CocktailDecorate

public abstract class CocktailDecorate implements Cocktail {
    Cocktail cocktail;

    public CocktailDecorate(Cocktail cocktail) {
        this.cocktail = cocktail;
    }

    @Override
    public String getDescription() {
        return cocktail.getDescription();
    }

}

具体装饰类

public class LemonJuice extends CocktailDecorate {

    public LemonJuice(Cocktail decorate) {
        super(decorate);
    }

    @Override
    public String getDescription() {
        return super.getDescription() + ", Lemon Juice";
    }

}

public class PomegranateJuice extends CocktailDecorate {

    public PomegranateJuice(Cocktail decorate) {
        super(decorate);
    }

    @Override
    public String getDescription() {
        return super.getDescription() + ", Pomegranate Juice";
    }

}

public class DistilledWater extends CocktailDecorate {

    public DistilledWater(Cocktail decorate) {
        super(decorate);
    }

    @Override
    public String getDescription() {	
        return super.getDescription() + ", Distilled Water";
    }

}

public class IceBlock extends CocktailDecorate {

    public IceBlock(Cocktail decorate) {
        super(decorate);
    }

    @Override
    public String getDescription() {
        return super.getDescription() + ", Ice Block";
    }

}

运行

public static void main(String[] args) {
    Cocktail cocktail = new Whisky();
    cocktail = new LemonJuice(cocktail);
    cocktail = new PomegranateJuice(cocktail);
    cocktail = new DistilledWater(cocktail);
    System.out.println(cocktail.getDescription());

    cocktail = new Vodka();
    cocktail = new IceBlock(cocktail);
    System.out.println(cocktail.getDescription());
}

输出

Whisky, Lemon Juice, Pomegranate Juice, Distilled Water
Vodka, Ice Block

相关文章
Java 设计模式之策略模式
Java 设计模式之观察者模式
Java 设计模式之装饰者模式
Java 设计模式之工厂方法模式
Java 设计模式之抽象工厂模式
Java 设计模式之单例模式

猜你喜欢

转载自blog.csdn.net/chennai1101/article/details/84859767
今日推荐