美文网首页
设计模式系列:装饰模式

设计模式系列:装饰模式

作者: coder_liu | 来源:发表于2017-09-19 07:19 被阅读0次

场景

早上饿了,我要煎饼果子。(我也是来了北京之后,知道早点还有煎饼果子,哈哈!)我对师傅说:师傅,来一套煎饼果子。(切克闹)师傅问:要加点啥?我瞅了瞅菜单,如下:

煎饼果子图片.jpg

我说加个香肠和鸡蛋吧,师父说:好的。到算账的时候咋算呢?请实现此场景。

代码-version1

public class JbgzBuilder implements IBuilder {
    public JbgzFood build() {
        JbgzFood food = new JbgzFood();
        food.addStuff("面皮");
        food.addStuff("薄脆");
        food.addStuff("咸菜");
        food.addStuff("鸡蛋");
        return food;
    }
}

public class Test {
    public static void main(String[] args) {
       JbgzBuilder builder = new JbgzBuilder();
       builder.build();
    }
}

代码-version2

public class JbgzFood {
    private List<String> stuffs = new ArrayList<String>();
    public JbgzFood(){}
    public void addStuff(String stuff){
        stuffs.add(stuff);
    }
}

public class ChickenWillowBuilder implements IBuilder {
    private IBuilder builder;
    public ChickenWillowBuilder(IBuilder builder) {
        this.builder = builder;
    }
    public JbgzFood build() {
        JbgzFood food = builder.build();
        food.addStuff("chickenWillow");
        return food;
    }
}

public class EggBuilder implements IBuilder {
    private IBuilder builder;
    public EggBuilder(IBuilder builder) {
        this.builder = builder;
    }
    public JbgzFood build() {
        JbgzFood food =builder.build();
        food.addStuff("egg");
        return food;
    }
}

public class HamSausageBuilder implements IBuilder {
    private IBuilder builder;
    public HamSausageBuilder(IBuilder builder) {
        this.builder = builder;
    }
    public JbgzFood build() {
        JbgzFood food =builder.build();
        food.addStuff("hanSausage");
        return food;
    }
}

public class Test {
    public static void main(String[] args) {
        //基本煎饼果子,加鸡蛋,加鸡柳
        IBuilder eggCheckenBuilder = new ChickenWillowBuilder(new EggBuilder(new JbgzBuilder()));
        eggCheckenBuilder.build();
        //基本煎饼果子,加鸡蛋,加鸡柳,加火腿肠
        IBuilder builder = new HamSausageBuilder(new ChickenWillowBuilder(new EggBuilder(new JbgzBuilder())));
        builder.build();
    }
}

定义

动态给一个对象添加一些额外的职责,就象在墙上刷油漆.使用Decorator模式相比用生成子类方式达到功能的扩充显得更为灵活。

其实这里的设计和IO流的功能叠加用的是同一种设计

类图

装饰者.jpg

相关文章

  • 设计模式整理(11) 装饰模式

    学习《Android 源码设计模式解析与实践》系列笔记 介绍 装饰模式,也称包装模式,结构型设计模式之一。 定义 ...

  • Android 装饰者模式

    Android 设计模式系列文章 Android 23种设计模式 一、前言 装饰者模式也称为包装模式,其使用一种对...

  • 手撸golang 结构型设计模式 装饰器模式

    手撸golang 结构型设计模式 装饰器模式 缘起 最近复习设计模式拜读谭勇德的<<设计模式就该这样学>>本系列笔...

  • 设计模式系列:装饰模式

    场景 早上饿了,我要煎饼果子。(我也是来了北京之后,知道早点还有煎饼果子,哈哈!)我对师傅说:师傅,来一套煎饼果子...

  • 设计模式系列 — 装饰模式

    点赞再看,养成习惯,公众号搜一搜【一角钱技术[https://p3-juejin.byteimg.com/tos-...

  • Java设计模式系列-装饰器模式

    原创文章,转载请标注出处:《Java设计模式系列-装饰器模式》 一、概述 装饰器模式作用是针对目标方法进行增强,提...

  • 9、结构型模式-装饰器设计模式

    1、如虎添翼的设计模式-装饰器设计模式 简介:讲解-装饰器设计模式介绍和应用场景 装饰器设计模式(Decorato...

  • 安卓设计模式(四)装饰者模式

    本文将讨论Java设计模式中比较重要的模式之一:装饰者模式 该系列其他文章: 安卓设计模式(一)面向对象六大设计原...

  • 设计模式笔记汇总

    目录 设计原则 “依赖倒置”原则 未完待续... 设计模式 设计模式——策略模式 设计模式——装饰者模式 设计模式...

  • 11.4设计模式-装饰模式-讲解

    设计模式-装饰模式 装饰模式详解 装饰模式在android中的实际运用,避免了耦合 1. 装饰模式详解 2.装饰模...

网友评论

      本文标题:设计模式系列:装饰模式

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