java编程思想第4版第15章混型笔记及装饰器模式
来源:互联网 发布:日本历史书籍推荐知乎 编辑:程序博客网 时间:2024/06/07 05:41
一般使用接口来产生混型效果。
装饰器是使用组合和形式化结构,混型基于继承。
装饰器只是只是对由混型提出问题的一种局部解决方案。
动态的将责任链附加到对象上。
咖啡-装饰器模式。
/** * Created by superdaojian on 17/3/7. */abstract class BasicCoffee { public abstract double cost();}class Coffee1 extends BasicCoffee{ public double cost(){ return 3.14160; }}class Coffee2 extends BasicCoffee{ public double cost(){ return 3.14159; }}//调料基类,抽象装饰者abstract class CondimentDecorator extends BasicCoffee { protected BasicCoffee basicCoffee; public double cost(){ return 0; }}class Milk extends CondimentDecorator{ public Milk(BasicCoffee basicCoffee) { this.basicCoffee = basicCoffee; } public double cost() { return basicCoffee.cost() + 0.2; }}class Soy extends CondimentDecorator{ public Soy(BasicCoffee basicCoffee) { this.basicCoffee = basicCoffee; } public double cost() { return basicCoffee.cost() + 0.3; }}class Sugar extends CondimentDecorator{ public Sugar(BasicCoffee basicCoffee) { this.basicCoffee = basicCoffee; } public double cost() { return basicCoffee.cost() + 0.4; }}public class CoffeeTest{ public static void main(String[] args) { //加milk的coffee1 BasicCoffee coffe1 = new Coffee1(); coffe1 = new Milk(coffe1); System.out.println("milk coffee1 cost = " + coffe1.cost()); //加soy和sugar的coffee2 BasicCoffee coffe2 = new Coffee2(); coffe2 = new Soy(coffe2); coffe2 = new Sugar(coffe2); System.out.println("soy sugar coffee2 cost = " + coffe2.cost()); }}
若要扩展功能,装饰器提供了比继承更加富有弹性的代替方案。多用组合,少用继承。不用在程序还未运行时候创建大量类,而是在程序运行中按需动态组合类。扩展性好。如果还要根据咖啡的体积大小也要收取不同的费用,上面的代码不改,再编写继承CondimentDecorator的装饰者就可以了。当装饰者多了之后,那么程序中会有很多装饰者类,像上面我们就有了三个调料类,如果加上大杯小杯的要求之后,就有五个装饰者类。不过幸运的是这些类都很小,功能也比较单一。实际使用举例:JAVA的 IO流类以及Python中装饰器语法。
另外可以使用动态代理创建比装饰器更贴近混型的机制。
0 0
- java编程思想第4版第15章混型笔记及装饰器模式
- java编程思想第4版第15章泛型擦除笔记及练习21
- java编程思想第4版第15章通配符笔记及练习
- java编程思想第4版第15章自限定类型笔记
- JAVA 编程思想 第4版 学习笔记 - 第五章
- Java编程思想(第4版)
- JAVA编程思想第4版读书笔记
- Java编程思想第4版-第一章
- 《Java编程思想(第4版)》pdf
- JAVA编程思想(第4版) 构造器初始化及顺序
- java编程思想笔记(第四版*第8章)
- 《Java 编程思想》-第4章 控制执行流程 笔记
- 一.Java对象导论——Java编程思想第4版学习笔记
- JAVA编程思想第4版第15章泛型的练习5
- JAVA编程思想第4版第15章泛型的练习20
- Java 编程思想(第4版)学习笔记(ArrayList 泛型 foreach 第11章练习1 hop())
- Java 编程思想(第4版)学习笔记(迭代器 Iterator ListIterator 第11章练习11)
- Java 编程思想(第4版)学习笔记(ArrayList 泛型 foreach 第11章练习1 hop())
- L1-009. N个数求和
- 自己瞎写的小程序
- sdutacm-cyk追楠神系列一
- hadoop环境配置
- [Tkinter 教程09] Scale 控件
- java编程思想第4版第15章混型笔记及装饰器模式
- bole
- CSS3 Background-size
- 微服务实践Go
- 1
- sdutacm-bLue的文件查找器
- 赋予一个普通用户root权限(cetosOs6.5)
- 2
- SolrCloud使用implict路由规则创建Shard