打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
java设计模式精讲 Debug 方式+内存分析 第11章 装饰者模式

装饰者模式

11-1 装饰者模式讲解





11-2 装饰者模式coding

有一个煎饼类:

public class Battercake {    protected String getDesc() {        return "煎饼";    }    protected int cost() {        return 8;    }}

煎饼加鸡蛋类:

public class BattercakeWithEgg extends Battercake {    @Override    public String getDesc() {        return super.getDesc()+"加一个鸡蛋";    }    @Override    public int cost() {        return super.cost()+1;    }}

煎饼加鸡蛋加香肠类:

public class BattercakeWithEggSausage extends BattercakeWithEgg{    @Override    public String getDesc() {        return super.getDesc()+"一个香肠";    }    @Override    public int cost() {        return super.cost()+2;    }}

测试:

public class Test {    public static void main(String[]args){        Battercake battercake = new Battercake();        System.out.println(battercake.getDesc()+"销售价格:"+battercake.cost());        BattercakeWithEgg battercakeWithEgg = new BattercakeWithEgg();        System.out.println(battercakeWithEgg.getDesc()+"销售价格:"+battercakeWithEgg.cost());        BattercakeWithEggSausage battercakeWithEggSausage = new BattercakeWithEggSausage();        System.out.println(battercakeWithEggSausage.getDesc()+"销售价格:"+battercakeWithEggSausage.cost());    }}

执行结果:

煎饼销售价格:8
煎饼加一个鸡蛋销售价格:9
煎饼加一个鸡蛋一个香肠销售价格:11


这个时候,有一个人加了两个鸡蛋,这个时候,根据上面的就是不能算出价格的;


现在,我们用装饰者模式来写:
有一个抽象的煎饼类:

public abstract class ABattercake {    protected abstract String getDesc();    protected abstract int cost();}

煎饼类继承于上面的抽象兼饼类:

public class Battercate extends ABattercake {    @Override    protected String getDesc() {        return "煎饼";    }    @Override    protected int cost() {        return 8;    }}

我们让抽象的装饰者类继承抽象的实体:

public class AbstractDecorator extends ABattercake{    private ABattercake aBattercake;    public AbstractDecorator(ABattercake aBattercake) {        this.aBattercake = aBattercake;    }    @Override    protected String getDesc() {        return aBattercake.getDesc();    }    @Override    protected int cost() {        return aBattercake.cost();    }}

煎饼添加鸡蛋的装饰类继承于抽象的装饰类:

public class EggDecorator extends AbstractDecorator{    public EggDecorator(ABattercake aBattercake) {        super(aBattercake);    }    @Override    protected String getDesc() {        return super.getDesc()+"加一个鸡蛋";    }    @Override    protected int cost() {        return super.cost()+1;    }}

煎饼添加香肠的装饰类,继承于抽象的装饰类:

public class SausageDecorator extends AbstractDecorator{    public SausageDecorator(ABattercake aBattercake) {        super(aBattercake);    }    @Override    protected String getDesc() {        return super.getDesc()+"加一根香肠";    }    @Override    protected int cost() {        return super.cost()+2;    }}

这个就是现在的类图:


测试:

public class Test {    public static void main(String[]args){        ABattercake aBattercake;        aBattercake = new Battercate();        aBattercake = new EggDecorator(aBattercake);        aBattercake = new EggDecorator(aBattercake);        aBattercake = new SausageDecorator(aBattercake);        System.out.println(aBattercake.getDesc()+"价格为:"+aBattercake.cost());    }}

执行结果:

煎饼加一个鸡蛋加一个鸡蛋加一根香肠价格为:12


11-3 装饰者模式源码解析(spring-session mybatis jdk servlet)

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Spring中常见的设计模式——装饰者模式
装饰者模式,从吃黄焖鸡开始说起
设计模式入门教程(二)
[Head First设计模式]山西面馆中的设计模式——装饰者模式
《Head First设计模式》阅读笔记.第三章
Decorator
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服