美文网首页
装饰者模式

装饰者模式

作者: Equals__ | 来源:发表于2020-04-27 15:53 被阅读0次

    装饰者模式

    装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。
    动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活.

    应用场景

    1、扩展一个类的功能。 2、动态增加功能,动态撤销。

    实现

    创建一个饮料接口:

    public interface Drink {
    
        String makeDrink();
    
    }
    

    创建两个子类

    public class Tea implements Drink{
    
    
        @Override
        public String makeDrink() {
            System.out.println("做茶");
            return "make a tea";
        }
    }
    
    public class Water implements Drink {
        @Override
        public String makeDrink() {
            System.out.println("一杯水");
            return "water";
        }
    }
    

    创建装饰者:

    public class Decorate  implements  Drink{
    
        // 传入drink类,修饰drink
        Drink drink;
    
        public Decorate(Drink drink) {
            this.drink = drink;
        }
    
        @Override
        public String makeDrink() {
            drink.makeDrink();
            return "decorate";
        }
    }
    

    创建具体装饰者,例如给饮料加冰糖雪梨:

    public class ConcurDecorate extends  Decorate {
    
        public ConcurDecorate(Drink drink) {
            super(drink);
        }
    
        public String makeDrink() {
            drink.makeDrink();
            System.out.println("加冰糖雪梨");
            return "concur decorate";
        }
    }
    

    测试类:

    public static void main(String[] args) {
            Tea tea = new Tea();
            Water water= new Water();
            Drink drink = new ConcurDecorate(tea);
            Drink drink1 = new ConcurDecorate(water);
    
            drink.makeDrink();
            drink1.makeDrink();
    
            Drink drink2 = new ConcurDecorate(drink);
            drink2.makeDrink();
        }
    

    输出结果:

    • 做茶
    • 加冰糖雪梨
    • 一杯水
    • 加冰糖雪梨
    • 做茶
    • 加冰糖雪梨
    • 加冰糖雪梨

    总结

    1. 装饰者需要实现接口
    2. 接口类传入装饰者的构造器
    3. 具体装饰者内容集成装饰者,添加不同的装饰

    相关文章

      网友评论

          本文标题:装饰者模式

          本文链接:https://www.haomeiwen.com/subject/mgtuwhtx.html