开放-关闭原则

类应该对扩展开放,对修改关闭:当类中需要加入新功能时,可以考虑扩展新的类,而不是修改原有的类。

认识装饰者模式

1、拿一个咖啡为对象

2、以摩卡对象装饰它

3、以牛奶对象装饰它

4、调用cost方法,并依赖委托将调料价格加上

装饰者和被装饰对象有相同额超类型

你可以用一个或多个装饰者包装一个对象

装饰者可以在所委托被装饰者的行为之前或者之后,加上自己的行为,以达到特定的目的

对象可以在任何时候被装饰,所以可以在运行时动态地、不限量地用你喜欢的装饰者来装饰对象

装饰者模式动态的将责任或者特性附加到对象上。若要扩展功能,装饰者提供比继承更有弹性的替代方案

public abstract class Beverage {String  description = "Unknow Beverage";public String getDescription() {return description;}public abstract double cost();
}public abstract class CondimentDecorator extends Beverage{public abstract String getDescription();
}public class Espresso extends Beverage {public Espresso(){description = "Espresso";}@Overridepublic double cost() {return 1.99;}
}public class HouseBlend extends Beverage {public  HouseBlend(){description = "House Blend Coffee";}@Overridepublic double cost() {return 0.89;}
}public class Mocha extends CondimentDecorator {Beverage beverage;public Mocha(Beverage beverage){this.beverage = beverage;}public String getDescription(){return beverage.getDescription()+",Mocha";}@Overridepublic double cost() {return 0.20 + beverage.cost();}
}public class StarbuzzCoffee {public static void main(String[] args){Beverage beverage = new Espresso();System.out.println(beverage.getDescription() + " $ "+beverage.cost());beverage = new Mocha(beverage);System.out.println(beverage.getDescription() + " $ "+beverage.cost());}
}

转载于:https://blog.51cto.com/3540931/1874325

Head First Design Patten装饰者模式相关推荐

  1. J2ee 模式 Design Patten

    什么是Design Patten? 简单来说,Design Patten 就是一个常用的方案. 在我们的开发过程中,经常会遇到一些相同或者相近的问题,每次我们都会去寻找一个新的解决方法,为了节省时间提 ...

  2. 【design pattern】结构型模式之—装饰者模式(Decorator)

    Motivation 你可以通过继承,静态的扩展对象的功能(编译期):然而有时候你需要在对象被使用的时候,动态的扩展对象的功能(运行期):这个时候你就需要装饰者模式. Intent 装饰者模式的目的是 ...

  3. 设计模式之装饰器模式(Decorator Design Pattern)

    装饰器模式是八种结构型模式之一,通过一个装饰类来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能. 装饰器模式与代理模式非常像,区别是代理模式是原始功能上附加功能,而装饰器模式是增强原 ...

  4. 如何利用装饰者模式在不改变原有对象的基础上扩展功能

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:双子孤狼 blog.csdn.net/zwx9001 ...

  5. 【设计模式】装饰者模式 ( 概念 | 适用场景 | 优缺点 | 与继承对比 | 定义流程 | 运行机制 | 案例分析 )

    文章目录 I . 装饰者模式概念 II . 装饰者模式适用场景 III . 装饰者模式优缺点 IV . 装饰者模式与继承对比 V . 装饰者模式相关设计模式 VI . 装饰者模式四个相关类 VII . ...

  6. 设计模式——装饰者(Decorator)模式DEMO——成绩汇报的装饰者模式实现

    问题描述 考试成绩Score,如果直接告诉(report)成绩(例如65分),家长会生气:加一个装饰器,先告诉家长,这次考试比上次增加了几分,家长会比较高兴:加一个装饰器,告诉家长,这次考试最高成绩比 ...

  7. 设计模式——装饰者(Decorator)模式DEMO——游戏角色的装饰者模式实现

    问题描述 游戏中,角色Character可以有属性attack, defence,可以有装备weapen, armour,可以对属性造成影响,它们可以是类的属性:可以随时变成巨人gigantize,可 ...

  8. 装饰着模式示例_装饰器设计模式示例

    装饰着模式示例 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式如此重要的原 ...

  9. python中的装饰器、装饰器模式_浅析Python装饰器以及装饰器模式

    漫谈 如果作为一个Python入门,不了解Python装饰器也没什么,但是如果作为一个中级Python开发人员,如果再不对python装饰器熟稔于心的话,那么可能并没有量变积累到质变. 我以前也看过很 ...

最新文章

  1. 这些动物,你认识几个呢
  2. python 0o-377 -0o377_Python : 反射
  3. shiro密码正确也会匹配错误_Shiro安全框架
  4. [LeetCode] 461. Hamming Distance
  5. hashcode的理解
  6. java里的时间转换
  7. centos 7 mysql随机密码_在centos中安装了mysql5.7之后解决不知道随机的密码的问题...
  8. 报错,ERROR 8324 --- [io-12000-exec-8] c.y.cols.controller.CardTypeController
  9. 录录录屏(video321)--1款亲测好用的免费高清录屏软件。你一定无法拒绝(附使用教程)
  10. Win7 ASP连接数据库“未找到提供程序.该程序可能未正确安装”问题
  11. python实现等量随机分组
  12. Word前几页是罗马数字,后面是阿拉伯数字怎么设置
  13. 傅立叶变换之(二)—— 傅立叶级数
  14. Win10方便快捷键
  15. 一二线城市互联网公司汇总,助你拿高薪!
  16. 有赞宣布收费,免费模式在移动电商时代真走不通?
  17. linux蓝屏漏洞,WIN 10漏洞:访问特定本地设备导致系统崩溃
  18. Java编程:基于socket实现局域网双人联机对战五子棋
  19. CentOS 开机启动详解
  20. JS完成注册页面的省市联动(JS内置对象全局函数,select标签操作)

热门文章

  1. python简单实现抓取英雄联盟皮肤原画:老玩家都哭了!
  2. 新零售时代,即拼商城模式如何做?
  3. c++ 手写堆 (包括建堆、排序、添加元素、删除元素)
  4. 1024程序员节|赠送这15本书,获奖的任选 !
  5. [burp对蚁剑流量分析问题]
  6. java图形界面多线程_多线程编程、Java I/O系统和Java图形界面编程
  7. matlab计算表达式 k,刘卫国 Matlab 例题 1-3章
  8. Word文档怎么删除html标签,Word文档中怎么删除空白页?删除空白页的六种方法
  9. c语言日历星期,新手做的日历表及查找日期是星期几
  10. Linux Python利用海康相机C++SDK(丝滑取流)