Head First Design Patten装饰者模式
开放-关闭原则
类应该对扩展开放,对修改关闭:当类中需要加入新功能时,可以考虑扩展新的类,而不是修改原有的类。
认识装饰者模式
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装饰者模式相关推荐
- J2ee 模式 Design Patten
什么是Design Patten? 简单来说,Design Patten 就是一个常用的方案. 在我们的开发过程中,经常会遇到一些相同或者相近的问题,每次我们都会去寻找一个新的解决方法,为了节省时间提 ...
- 【design pattern】结构型模式之—装饰者模式(Decorator)
Motivation 你可以通过继承,静态的扩展对象的功能(编译期):然而有时候你需要在对象被使用的时候,动态的扩展对象的功能(运行期):这个时候你就需要装饰者模式. Intent 装饰者模式的目的是 ...
- 设计模式之装饰器模式(Decorator Design Pattern)
装饰器模式是八种结构型模式之一,通过一个装饰类来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能. 装饰器模式与代理模式非常像,区别是代理模式是原始功能上附加功能,而装饰器模式是增强原 ...
- 如何利用装饰者模式在不改变原有对象的基础上扩展功能
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:双子孤狼 blog.csdn.net/zwx9001 ...
- 【设计模式】装饰者模式 ( 概念 | 适用场景 | 优缺点 | 与继承对比 | 定义流程 | 运行机制 | 案例分析 )
文章目录 I . 装饰者模式概念 II . 装饰者模式适用场景 III . 装饰者模式优缺点 IV . 装饰者模式与继承对比 V . 装饰者模式相关设计模式 VI . 装饰者模式四个相关类 VII . ...
- 设计模式——装饰者(Decorator)模式DEMO——成绩汇报的装饰者模式实现
问题描述 考试成绩Score,如果直接告诉(report)成绩(例如65分),家长会生气:加一个装饰器,先告诉家长,这次考试比上次增加了几分,家长会比较高兴:加一个装饰器,告诉家长,这次考试最高成绩比 ...
- 设计模式——装饰者(Decorator)模式DEMO——游戏角色的装饰者模式实现
问题描述 游戏中,角色Character可以有属性attack, defence,可以有装备weapen, armour,可以对属性造成影响,它们可以是类的属性:可以随时变成巨人gigantize,可 ...
- 装饰着模式示例_装饰器设计模式示例
装饰着模式示例 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式如此重要的原 ...
- python中的装饰器、装饰器模式_浅析Python装饰器以及装饰器模式
漫谈 如果作为一个Python入门,不了解Python装饰器也没什么,但是如果作为一个中级Python开发人员,如果再不对python装饰器熟稔于心的话,那么可能并没有量变积累到质变. 我以前也看过很 ...
最新文章
- 这些动物,你认识几个呢
- python 0o-377 -0o377_Python : 反射
- shiro密码正确也会匹配错误_Shiro安全框架
- [LeetCode] 461. Hamming Distance
- hashcode的理解
- java里的时间转换
- centos 7 mysql随机密码_在centos中安装了mysql5.7之后解决不知道随机的密码的问题...
- 报错,ERROR 8324 --- [io-12000-exec-8] c.y.cols.controller.CardTypeController
- 录录录屏(video321)--1款亲测好用的免费高清录屏软件。你一定无法拒绝(附使用教程)
- Win7 ASP连接数据库“未找到提供程序.该程序可能未正确安装”问题
- python实现等量随机分组
- Word前几页是罗马数字,后面是阿拉伯数字怎么设置
- 傅立叶变换之(二)—— 傅立叶级数
- Win10方便快捷键
- 一二线城市互联网公司汇总,助你拿高薪!
- 有赞宣布收费,免费模式在移动电商时代真走不通?
- linux蓝屏漏洞,WIN 10漏洞:访问特定本地设备导致系统崩溃
- Java编程:基于socket实现局域网双人联机对战五子棋
- CentOS 开机启动详解
- JS完成注册页面的省市联动(JS内置对象全局函数,select标签操作)
热门文章
- python简单实现抓取英雄联盟皮肤原画:老玩家都哭了!
- 新零售时代,即拼商城模式如何做?
- c++ 手写堆 (包括建堆、排序、添加元素、删除元素)
- 1024程序员节|赠送这15本书,获奖的任选 !
- [burp对蚁剑流量分析问题]
- java图形界面多线程_多线程编程、Java I/O系统和Java图形界面编程
- matlab计算表达式 k,刘卫国 Matlab 例题 1-3章
- Word文档怎么删除html标签,Word文档中怎么删除空白页?删除空白页的六种方法
- c语言日历星期,新手做的日历表及查找日期是星期几
- Linux Python利用海康相机C++SDK(丝滑取流)