设计模式之装饰器模式

装饰器模式应用场景

装饰器模式是一种类似于搭积木一样的模式,在底层会提供一个基础版本,可以在上面累加各种各样不同的配件,比如一个空房子,可以自由组合里面的家具。

装饰器模式的使用

首先需要写一个接口或抽象类,并且一个基础版本来继承这个接口。

public abstract class BatterCake {
    protected abstract String getMsg();
    protected abstract int getPrice();
}
public class BaseBatterCake extends BatterCake{
    @Override
    protected String getMsg() {
        return "煎饼";
    }

    @Override
    protected int getPrice() {
        return 5;
    }
}

然后提供一个对外的装饰器继承这个接口,此时这个对外接口必须提供一个构造方法,传入的参数为父类的对象,同时继承父类的方法。

public class BatterCakeDecorator extends BatterCake{

    private BatterCake batterCake;

    public BatterCakeDecorator(BatterCake batterCake) {
        this.batterCake = batterCake;
    }

    protected String getMsg() {
        return this.batterCake.getMsg();
    }

    protected int getPrice() {
        return this.batterCake.getPrice();
    }
}

然后可以通过这个装饰器向下扩展很多个基础扩展,实现对基础版本的叠加。

public class EggDecorator extends BatterCakeDecorator{
    public EggDecorator(BatterCake batterCake) {
        super(batterCake);
    }
    @Override
    protected String getMsg() {
        return super.getMsg() + "+鸡蛋";
    }

    @Override
    protected int getPrice() {
        return super.getPrice() + 1;
    }
}
public class SauageDecorator extends BatterCakeDecorator{
    public SauageDecorator(BatterCake batterCake) {
        super(batterCake);
    }
    @Override
    protected String getMsg() {
        return super.getMsg() + "+香肠";
    }

    @Override
    protected int getPrice() {
        return super.getPrice() + 2;
    }
}

测试以上的代码

public class Test {
    public static void main(String[] args) {
        BatterCake batterCake;

        batterCake = new BaseBatterCake();

        batterCake = new EggDecorator(batterCake);
        batterCake = new EggDecorator(batterCake);
        batterCake = new SauageDecorator(batterCake);

        System.out.println(batterCake.getMsg()+", 总价:"+batterCake.getPrice());
    }
}

测试结果

煎饼+鸡蛋+鸡蛋+香肠, 总价:9

Process finished with exit code 0

装饰器模式类图

在这里插入图片描述
装饰器模式就是利用Decorator装饰器的构造方法创建一个Base基础类,通过Decorator装饰器的子类对装饰器不断地叠加达到搭积木的效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值