首页计算机计算机软件设计模式 05 第三部分 装饰模式.pptx

05 第三部分 装饰模式.pptx

页数:16页文件大小:194.0 KB来源: 设计模式ppt课件

本课件继续结构型设计模式,对比只用组合或只用继承的不足,进而说明装饰模式层层扩展职责、代理模式控制对象访问以及享元模式共享细粒度对象的做法与效果。

装饰模式引入页,从改变Dog的Eat实现与为其扩展功能两种方式提出问题
只使用组合的不足,NewDog与Animal失去父子关系且Client代码需要修改
只使用继承的不足,多个职责组合导致子类数量激增且无法统一改变多个类的功能
查看本课件的文字版(共 16 页,供检索与复制)

第1页:3.5 装饰模式

3.5装饰模式(Decorator Pattern)1.改变Dog的Eat实现,怎么办?(两种方式)2.若只是希望给Dog的Eat扩展一些功能呢?1中的方法会有哪些不足呢?

第2页:只使用组合的不足

只使用组合的不足:1.NewDog与Animal不再有父子关系(即使NewDog组合Animal也一样)。2.Client需要修改。

第3页:只使用继承的不足

只使用继承的不足:1.当Eat和Sleep同时变化,有多种组合时,子类数量激增。2.只能改变单个类的功能,例如这里只能改变Dog的,不能改变Tiger的。3.不能统一改变全部类型的功能。如不能同时改变Tiger和Dog的Eat。

第4页:共同使用组合和继承

共同使用组合和继承:

第5页:更一般化的装饰结构

更一般化的:

第6页:装饰模式结构

3.5.2结构

第7页:装饰模式效果

3.5.3装饰着模式效果优点:1.保持抽象层上关系的稳定;2.比单独使用组合或继承灵活;3.随时扩展功能或职责;不足:1.可能产生许多更小的子类;2.Component类过大时,效率较低,此时可考虑使用策略模式

第8页:装饰模式示例:Shape加边框

3.5.4例子现在希望扩展所有Shape的Draw功能:即:处理原来正常的绘制外,还要在各自Shape的外边画各自的边框,Circle外边画一个菱形框,Triangle外边画一个矩形框。

第9页:

第10页:3.6 代理模式

3.6代理模式当事人律师法院在A对象访问B对象时,为B对象提供一个中介(代理)Proxy,使得A对象不再直接访问B对象,而是直接访问Proxy,由Proxy自行决定是否与B对象交互。这样就可以控制对B对象的访问。

第11页:代理模式示例

例:

第12页:代理模式结构

3.6.2代理模式结构

第13页:代理的种类

代理的种类与作用
代理种类作用
远程代理(Remote Proxy)隐藏目标对象的位置信息
虚拟代理(Virtual Proxy)隐藏具体的访问过程及实现细节
保护代理(Protection Proxy)保证访问的安全性
智能指针(Smart Pointer)在访问时自动管理对象的释放

第14页:智能指针SmartPtr示例

class SmartPtr{public:SmartPtr (A *p): ptr(p) { }~ SmartPtr( ) { delete ptr; }A* operator->( ) { return prt;}// other operationsprivate:SmartPtr(const SmartPtr&);SmartPtr& operator=(constSmartPtr&);private:A *ptr;// other data};main() {SmartPtr pt(new A);pt->f( );}对比:main() {A * pt = new A;pt->f( );delete pt;}

第15页:3.7 享元模式

3.7享元模式

第16页:享元模式示例:字符图像

字符图像(例)

  • 字符图像是:
  • 单行字符串
  • 将字符图像加框
  • 两个字符图像水平连接
  • 两个字符图像垂直连接
  • 给出合适的类结构,描述字符图像
  • 要方便以后对字符图像的功能扩展
顶部目录