首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

【设计形式】穿什么有这么重要? - 装饰模式

2012-06-23 
【设计模式】穿什么有这么重要? ---装饰模式一,定义英文名字:Decorator Pattern,又称装饰者模式。装饰模式是

【设计模式】穿什么有这么重要? --- 装饰模式

一,定义

        英文名字:Decorator Pattern,又称装饰者模式。

        装饰模式是在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。

 

二,总结

        装饰模式什么时候实用?

        当系统需要新功能的时候,向旧的类中添加新的代码,而新的代码装饰了原有类的核心职责或主要行为。

        如果在主类中添加新的字段,新的方法和新的逻辑,从而增加了主类的复杂度。而这些新添加的类仅仅是满足特定情况的特殊需要。

        解决方案:装饰模式,把每个要装饰的功能放在单独的类中,并让这个类包装它要装饰的对象,因此要执行特殊行为时,客户端可以在运行时候有顺序,有选择的装饰包装对象。

 

 

三,例子

         取自大话设计模式,小菜穿衣服。根据所穿不同衣服,穿衣服的顺序分析一个人风格?内裤内穿是普通人,内裤外穿是超人。

 

        1)小菜扮靓第一版

              下面程序,通过控制台可以完成扮靓的基本衣服类型。

               缺点:

                        如果要增加 “超人” 的装扮(内裤外穿),怎么办?

                        更改Person 类就违背了 开放 - 封闭原则,如何优化呢?把服饰写成子类,方便扩展衣物子类。

 

 

                2)小菜扮靓第二版

                      改进:增加了Finery 服饰抽象类,和各种具体服饰子类,方便了扩展各种服饰子类,而不必更改Person类,符合开放--封闭原则。

                      缺点:要显示穿的什么,还得在客户端dtx.show() //显示t恤 , kk.show() //显示垮裤。相当于光着身子在大庭广众之下穿衣服,如何改进?

                                  要内部组装完毕,然后显示出穿的什么来。这个貌似建造者模式(但是建造者模式要求建造过程是稳定的,这里可以内穿西装外套t恤)

 


                       3)小菜扮靓第三版

                        结构:Person类需要穿衣服,让抽象装饰类继承Person类。然后继承抽象服饰类,初始化服饰子类。

                        改进:相对于第二版,可以先将衣服穿好 (装饰过程)                          

 Sneakers* pqx = new Sneakers();
 BigTrouser* kk = new BigTrouser();
 TShirts* dtx = new TShirts();

 pqx->Decorator(xiaocai);
 kk->Decorator(pqx);
 dtx->Decorator(kk);

                                      然后再显示出来       dtx.show()

 


 

1楼tianshuai11昨天 23:06
顶一个撒

热点排行