Spring5-核心原理-学习 装饰者模式

内容都是从Tom老师的书中摘抄,记录下来方便自己学习。
装饰者模式(Decrator Pattern) 是指在不改变原有对象的基础上,将功能附加到对象上,提供了比继承更有弹性的方案(扩展原有对象的功能),属于结构型模式。适用一下场景:

  • 扩展一个类的功能或给一个类添加附加职责;
  • 动态给一个对象添加功能,这些功能可以在动态地撤销。
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 abstract class BattercakeDecorator extends Battercake {
    //静态代理、委派
    private  Battercake battercake;

    public BattercakeDecorator(Battercake battercake) {
        this.battercake = battercake;
    }
protected  abstract  void  doSomething();
    @Override
    protected String getMsg() {
        return this.battercake.getMsg();
    }
    @Override
    protected int getPrice() {
        return this.battercake.getPrice();
    }
}
public class EggDecorator extends  BattercakeDecorator {
    public EggDecorator(Battercake battercake) {
        super(battercake);
    }
    protected void doSomething() {
    }
    @Override
    protected String getMsg(){
        return  super.getMsg()+"1个鸡蛋";
    }
    @Override
    protected int getPrice(){
        return  super.getPrice()+1;
    }
}
public class SausageDecorator extends BattercakeDecorator{
    public SausageDecorator(Battercake battercake) {
        super(battercake);
    }
    protected void doSomething() {}
    @Override
    protected String getMsg(){
        return  super.getMsg()+"1根香肠";
    }
    @Override
    protected int getPrice(){
        return  super.getPrice()+2;
    }
}
public class BattercakeTest {
    public static void main(String[] args) {
        Battercake battercake;
        battercake=new BaseBattercake();
        battercake=new EggDecorator(battercake);
        battercake=new EggDecorator(battercake);
        battercake=new SausageDecorator(battercake);
        //跟静态代理最大的区别就是职责不同
        //静态代理不一定满足is-a的关系
        //静态代理会做功能增强,使同一职责变得不一样
        //装饰者模式更多考虑的是扩展
        System.out.println(battercake.getMsg()+",总价:"+battercake.getPrice());
    }
}

装饰者模式最本质的特征是将原有类的附加功能抽离出来,简化原有类的逻辑。通过案例可以总结出来,其实抽象的装饰者是可有可无的,具体可以根据业务模型来选择。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值