JAVA弑神大阵之装饰者大阵

架构说明

构成简述:

总接口:

装饰者跟被装饰者都要来实现他(或者理解成父接口),作用:对被装饰者做转换

被装饰者:

此处实现总接口。什么都不需要动,他只是被增强的功能!

装饰者:

装饰者负责定义共有功能

具体装饰者:

实现具体的功能

具体代码:

总接口:

public interface ICoffee {
    void makeCoffee();
}

被装饰者:

public class OriginalCoffee implements ICoffee {

    public OriginalCoffee() {
            System.out.println("原味咖啡调用无参构造创建自己,来自OriginalCoffee");
    }

    @Override
    public void makeCoffee() {
        System.out.println("原味咖啡 ");
    }
}

装饰者(抽象)

public class CoffeeDecorator implements ICoffee{

    private ICoffee coffee;

    public CoffeeDecorator() {
        System.out.println("CoffeeDecorator无参构造被调用,来自CoffeeDecorator");
    }

    public CoffeeDecorator(ICoffee iCoffee) {
        System.out.println("CoffeeDecorator有参构造被调用,来自CoffeeDecorator");
        this.coffee = iCoffee;
    }

    @Override
    public void makeCoffee() {
        coffee.makeCoffee();
    }
}

具体装饰者

public class MilkDecorator extends CoffeeDecorator{

    public MilkDecorator() {
        System.out.println("MilkDecorator无参构造被调用来自MilkDecorator");
    }

    public MilkDecorator(ICoffee iCoffee) {
        super(iCoffee);
    }

    @Override
    public void makeCoffee() {
        super.makeCoffee();
        addMilk();
    }
    private void addMilk(){
        System.out.println("加奶 ");
    }
}

客户端

public class Client {
    public static void main(String[] args) {
        //执行结果
        //原味咖啡
        //
        //原味咖啡
        //加奶
        //
        //原味咖啡
        //加奶
        //加糖

        //原味咖啡(1)   
        ICoffee coffee=new OriginalCoffee();
        coffee.makeCoffee();  //原味咖啡
        System.out.println("");

        //加奶的咖啡(1)
        coffee=new MilkDecorator(coffee);
        coffee.makeCoffee();  //原味咖啡   加奶
        System.out.println("");

        //先加奶后加糖的咖啡(1)
        coffee=new SugarDecorator(coffee);
        coffee.makeCoffee();  //原味咖啡	加奶	加糖
        System.out.println("");

        //跟上面的:原味咖啡(1)相等
        new OriginalCoffee().makeCoffee();

        //跟上面的:加奶的咖啡(1)相等
        new MilkDecorator(new OriginalCoffee()).makeCoffee();

        //跟上面的:先加奶后加糖的咖啡(1)相等
        new SugarDecorator(new MilkDecorator(new OriginalCoffee())).makeCoffee();
    }
}

调用链路(核心思想)

我学习所看的文章

https://zhuanlan.zhihu.com/p/64584677
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值