Java装饰设计模式的例子
这里给出一个顾客购买咖啡的例子。其中咖啡可以加冰(2元),加巧克力(4元)。
下面是面向对象中装饰模式的解决方案。
/**
* Created with IntelliJ IDEA.
* User: HYY
* Date: 13-10-27
* Time: 下午10:49
* To change this template use File | Settings | File Templates.
*/
interface Product {
public double money();
} class Coffee implements Product{ @Override
public double money() {
return 10;
}
} class Ice implements Product { private Product product; public Ice(Product product) {
this.product = product;
} @Override
public double money() {
return this.product.money() + 2;//加冰两块钱
}
} class Chocolate implements Product {
private Product product; public Chocolate(Product product) {
this.product = product;
} @Override
public double money() {
return this.product.money() + 4;//加糖四块钱
}
} public class BuyCoffee {
public static void main(String[] args) {
Product coffee = new Coffee();
Product iceCoffee = new Ice(coffee);
Product chocolateIceCoffee = new Chocolate(iceCoffee);
System.out.println("你买了巧克力加冰咖啡,一共:"+chocolateIceCoffee.money()+"元钱。");
}
}
Java装饰设计模式的例子的更多相关文章
- java 装饰设计模式模式
对已有功能进行增强 示例 已有的类 调用 增强后的类 调用 思考? 为什么要这么做呢? SuperPerson 继承 Person 可以达到同样的效果. 继承的写法,其中MyBuffer... ...
- java装饰设计模式
将一个对象作为参数进行传递,然后对这个对象进行包装---改变其中的方法或者添加一些新的行为---装饰设计模式---装饰者模式---Decorate Model 改变一个方法: 1. 通过继承这个类,然 ...
- java学习之IO装饰设计模式
装饰设计模式就是对已有的对象的功能进行增强 当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有的功能,并提供加强功能.那么自定义的该类称为装饰类. 装饰类通常会通过构造方法接收被装 ...
- JAVA之旅(二十六)——装饰设计模式,继承和装饰的区别,LineNumberReader,自定义LineNumberReader,字节流读取操作,I/O复制图片
JAVA之旅(二十六)--装饰设计模式,继承和装饰的区别,LineNumberReader,自定义LineNumberReader,字节流读取操作,I/O复制图片 一.装饰设计模式 其实我们自定义re ...
- java 28 - 3 设计模式之 装饰设计模式
装饰设计模式 装饰设计模式概述 装饰模式就是使用被装饰类的一个子类的实例,在客户端将这个子类的实例交给装饰类.是继承的替代方案 优点 使用装饰模式,可以提供比继承更灵活的扩展对象的功能,它可以动态的添 ...
- 黑马程序员——JAVA基础之装饰设计模式
------- android培训.java培训.期待与您交流! ---------- 装饰设计模式: 当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有的功能,并提供加强功能. ...
- Java:装饰设计模式
装饰设计模式: 当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有的功能, 并提供加强功能,那么自定义的该类就称为装饰类. 装饰类通常通过构造方法接收被装饰的对象,并基于被装饰的对 ...
- java中的装饰设计模式,浅谈与继承之间的区别
最初接触装饰设计模式,一直搞不懂这么做的意义是什么,看了网上很多的资料,对于与继承的区别并没有很清楚的分析,直到看到这篇博客:http://www.cnblogs.com/rookieFly-tdii ...
- Java基础---Java---IO流-----BufferedReader、BufferedWriter、缓冲区、装饰设计模式及和继承的区别
IO流 IO流用来处理设备之间的数据传输 java对数据的操作是过流的方式 流按操作数据分为两种:字节流与字符流 流按流向分为:输入流,输出流. IO流常用基类 字节流的抽象基类:InputStrea ...
随机推荐
- JAXB - Annotations, The Annotation XmlElement
The basic annotation for a field that's intended to be an element is XmlElement. It permits you to d ...
- Ubuntu 16.04 - 64bit 解压 rar 报错 Parsing Filters not supported
Ubuntu 16.04 - 64bit 解压rar 文件报错: 错误如下图: 原因: 未安装解压命令 unrar 参考博客: Error - "Parsing Filters not s ...
- Sencha Touch id 和 itemId
通过id获得组件: var view=Ext.getCmp('id'); 通过itemId获得组件: var view = ComponentQuery.query('view_xtype'), // ...
- Oracle Varchar2长度 及 PHP 长度判断
oracle数据库相信大家都比较熟悉,数据库中有一种非常常用的数据类型:字符串型. 对应该类型,在oracle中有三种比较常用的类型:varchar2(byte).varchar2( ...
- 编写delegate(明天补充)
delegate基本上是一种callback机制,让别的类在
- NOPI读取EXCEL
public void ReadEXCEL(string filePath) { IWorkbook wk = null; string extension = System.IO.Path.GetE ...
- ZOJ 2625 Rearrange Them(DP)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1625 题目大意:将n个数重新排列,使得每个数的前一个数都不能和之前的 ...
- Config spec rules for elements in subbranches
Quote from: Config spec rules for elements in subbranches The following is an example of a config s ...
- 【转】mysql in语句优化
mysql会对sql语句做优化, in 后面的条件不超过一定数量仍然会使用索引.mysql 会根据索引长度和in后面条件数量判断是否使用索引. 另外,如果是in后面是子查询,则不会使用索引. 一个文章 ...
- ehcache集群的配置
一:配置环境 本文是在测试demo的基础上写的,服务器包括申请的两台服务器和本机,共三台服务器.demo的目标是实现三台服务器之间共享cache. 申请的两台服务器地址分别是172.19.100.15 ...