当前位置:
文档之家› 软件设计模式ch3装饰者模式
软件设计模式ch3装饰者模式
(一) 编写自己的Java I/O装饰者 (二) 测试新的Java I/O装饰者
(一) 编写自己的Java I/O装饰者
(一) 编写自己的Java I/O装饰者
(二) 测试新的Java I/O装饰者
(二) 测试新的Java I/O装饰者
RUN
七、总结
总结
1
OO Basics
➢Abstraction ➢Encapsulation ➢Polymorphism ➢Inheritance
(二) 构造饮料订单
(二) 构造饮料订单
(二) 构造饮料订单
(二) 构造饮料订单
三、装饰者模式
(一) 定义 (二) 类图 (三) 缺点
(一) 定义
装饰者模式:动态地将责任加到对象身上。如果要 扩展功能,装饰者模式提供了比继承更有弹性的替 代方案。
(二) 类图
(三) 缺点
有时在设计中加入大量的小类,变得不容易理解。 有的客户端代码依赖于特定的类型(这是个比较糟
3
软件设计方法及设计模式
装饰者模式
张聚礼 副教授/系统分析师
主要内容
一
星巴兹咖啡
二
认识装饰者模式
三
装饰者模式
四
装饰饮料
五
真实世界的装饰者:Java I/O
六
编写自己的Java I/O装饰者
一、星巴兹咖啡
(一) 概况 (二) 饮料类 (三) 调整 (四) 效果 (五) 开放-关闭原则
(一) 概况
总结
3
OO Principles
➢Classes should be open for extension but closed for modification.
OO Patterns
➢Decorator - Attach additional responsibilities to an object dynamically. Decorators provide a flexible alternative to subclassing for extending functionality.
(五) 开放-关闭原则
二、认识装饰者模式
(一) 思路 (二) 构造饮料订单
(一) 思路
以饮料为主体,运行时以 调料来“装饰”饮料,例 如,顾客想要摩卡和奶泡 深焙咖啡:
① 取一个深焙咖啡对象 ② 以摩卡对象装饰它 ③ 以奶泡对象装饰它 ④ 调用cost()方法,并依赖委
托将调料的价钱加上去。
星巴兹是以扩展迅速而闻名的咖啡店, 其原始设计如下:
(二) 饮料类
(二) 饮料类
很明显,设计了太多的类
(三) 调整
从Beverage类开始,添加实例变量
加入子类
(三) 调整
(三) 调整
(四) 效果
(四) 效果
(五) 开放-关闭原则
设计原则五:
➢ 类应该对扩展开放,对修改关闭。
编写饮料代码
(二) 实现
(二) 实现
编写饮料代码(续)
编写调料代码
(二) 实现
(二) 实现
五、真实世界的装饰者:Java I/O
(一) 典型实例 (二) 装饰java.io类
(一) 典型实例
(二) 装饰java.io类
六、编写自己的Java I/O装饰者
糕的习惯,违反了“针对接口编程,而不是针对实 现编程”的设计原则),当服务器端引入装饰者模 式时,客户端就会出现状况。 装饰者模式使得实例化组件的复杂度提升。
四、装饰饮料
(一) 星巴兹饮料 (二) 实现
(一) 星巴兹饮料
(二) 实现
从Beverage类开始
(二) 实现
Beverage类很简单,下面来实现 CondimentDecorator调料类
总结
2
OO Principles
➢Strive for loosely coupled designs between objects that interact.
OO Patterns
➢Observer - defines a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically
OO Principles
➢Encapsulate what varies. ➢Favor composition over inheritence. ➢Program to interfaces, not implementations.
OO Patterns
➢Strategy - defines a family of algorithms, encapsulates each one, and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it.