装饰者模式---包装,展现最好的自己
2017-01-02 18:01
344 查看
声明:文章内容根据大牛博客的内容,自己理解后,给自己做的学习笔记,文末会附上大牛博客地址链接。有需要沟通交流的可加我QQ群:425120333 再解释装饰者模式之前,先罗列一个场景,现在网购因为价格实惠,种类繁多,越来越成为人们首选的购物方式,在网上购买了一个商品后, 店家会将该商品包装起来,然后给物流公司,物流公司又会在加一层外包装盒,再进行配送。一件商品从店家到买家,至少经过了两层的包装。 当然有些贵重的物品可能还有三层包装等,不管包装了多少层,核心的物品还是原来的商品,包装层相当于给该商品添加了额外的功能(保护商品、告知配送信息) ,也可以说是这些包装层就是对原先商品的修饰。在不改变原先商品的前提下,扩展了商品的功能。这就是这篇文章要讲解的装饰者模式。 装饰者模式,就是在不改变原先产品的前提下,动态的给产品添加新的功能。上面的例子,用代码体现出来如下:
public class ShowGoods { public static void main(String[] args) { //声明一个具体商品 AbstractGoods goods = new AGoods(); goods.hasName(); goods.hasPrice(); System.out.println("-------------------分隔符-------------------"); //经过店家包装 goods = new StoreDecorateGoods(goods); goods.hasName(); goods.hasPrice(); System.out.println("-------------------分隔符-------------------"); //再经过物流包装 goods = new LogisticsDecorateGoods(goods); goods.hasName(); goods.hasPrice(); System.out.println("-------------------分隔符-------------------"); } } /** * @introduce:抽象商品类 * */ abstract class AbstractGoods { //商品名字 protected abstract void hasName(); //商品价格 protected abstract void hasPrice(); } /** * @introduce:具体的商品A * */ class AGoods extends AbstractGoods { @Override protected void hasName() { System.out.println("商品名字是A"); } @Override protected void hasPrice() { System.out.println("商品价格是15"); } } /** * @introduce:商品装饰器类 * */ class GoodsDecorator extends AbstractGoods { private AbstractGoods goods; public GoodsDecorator(AbstractGoods goods) { this.goods = goods; } @Override protected void hasName() { goods.hasName(); } @Override protected void hasPrice() { goods.hasPrice(); } } class StoreDecorateGoods extends GoodsDecorator { public StoreDecorateGoods(AbstractGoods goods) { super(goods); } /** * @introduce店家提示 * */ public void storePrompt() { System.out.println("这层包装是为了避免弄脏商品"); } @Override protected void hasName() { storePrompt(); super.hasName(); } @Override protected void hasPrice() { super.hasPrice(); } } class LogisticsDecorateGoods extends GoodsDecorator { public LogisticsDecorateGoods(AbstractGoods goods) { super(goods); } /** * @introduce物流提示 * */ public void logisticsPrompt() { System.out.println("这层包装是为了展示配送信息"); } @Override protected void hasName() { super.hasName(); logisticsPrompt(); } @Override protected void hasPrice() { super.hasPrice(); } }
控制台输出:
商品名字是A
商品价格是15
——————-分隔符——————-
这层包装是为了避免弄脏商品
商品名字是A
商品价格是15
——————-分隔符——————-
这层包装是为了避免弄脏商品
商品名字是A
这层包装是为了展示配送信息
商品价格是15
——————-分隔符——————-
通过查看输出能够发现已经达到想要的效果了,如果后面还要经过别的包装,只需要添加一个相应的装饰器类即可,这就是装饰者模式的简单使用。 参考大牛链接:http://www.cnblogs.com/zuoxiaolong/p/pattern11.html
相关文章推荐
- 展现最好的自己
- 设计模式: 自己手动写一个装饰者模式
- 自己写的用c++实现的简单装饰者模式
- 装饰者模式(包装模式)
- 设计模式之装饰者(包装模式)模式
- 自己对装饰者模式的理解
- 原创 装饰者设计模式实例(第一次自己写博文,欢迎指正交流)
- 7. 装饰者模式--如何不同风格打扮自己
- 设计模式与泡mm的关系之Decorator装饰者设计模式及装饰者设计模式的再思考
- 设计模式随笔系列:来杯咖啡-装饰者模式(Decorator)[原]
- bootloader----自己写的,部分代码是参考网上的,转入pro模式后问题很多!
- 从追MM谈Java的23种设计模式 - 太经典了,转到自己的BLOG上收藏着先
- 自己编写类似于枚举的类型(多例模式)
- Decorate(装饰者模式) 实现留言版词汇处理
- 从追MM谈Java的23种设计模式 - 太经典了,转到自己的BLOG上收藏着先
- Head First Design patterns笔记-Decorator Patterns (从”用不同技能武装自己”看装饰模式)
- 设计模式示例二 Decorator(装饰者)
- 从追MM谈Java的23种设计模式 - 太经典了,转到自己的BLOG上收藏着先
- 模式的学习笔记----转摘自把爱好作为自己工作的人
- 利用现有资源建立自己的经营模式