打字猴:1.700477309e+09
1700477309 设计模式之禅 [:1700454069]
1700477310 设计模式之禅 31.2 装饰模式VS适配器模式
1700477311
1700477312 装饰模式和适配器模式在通用类图上没有太多的相似点,差别比较大,但是它们的功能有相似的地方:都是包装作用,都是通过委托方式实现其功能。不同点是:装饰模式包装的是自己的兄弟类,隶属于同一个家族(相同接口或父类),适配器模式则修饰非血缘关系类,把一个非本家族的对象伪装成本家族的对象,注意是伪装,因此它的本质还是非相同接口的对象。
1700477313
1700477314 大家都应该听过丑小鸭的故事吧,我们今天就用这两种模式分别讲述丑小鸭的故事。话说鸭妈妈有5个孩子,其中4个孩子都是黄白相间的颜色,而最小的那只也就是叫做丑小鸭的那只,是纯白色的,与兄弟姐妹不相同,在遭受了诸多的嘲讽和讥笑后,最终丑小鸭变成了一只美丽的天鹅。那我们如何用两种不同模式来描述这一故事呢?
1700477315
1700477316 31.2.1 用装饰模式描述丑小鸭
1700477317
1700477318 用装饰模式来描述丑小鸭,首先就要肯定丑小鸭是一只天鹅,只是因为她小或者是鸭妈妈的无知才没有被认出是天鹅,经过一段时间后,它逐步变成一个漂亮、自信、优美的白天鹅。根据分析我们可以这样设计,先设计一个丑小鸭,然后根据时间先后来进行不同的美化处理,怎么美化呢?先长出漂亮的羽毛,然后逐步展现出异于鸭子的不同行为,如飞行,最终在具备了所有的行为后,它就成为一只纯粹的白天鹅了,那我们来看类图,如图31-3所示。
1700477319
1700477320
1700477321
1700477322
1700477323 图31-3 装饰模式实现丑小鸭
1700477324
1700477325 类图比较简单,非常标准的装饰模式。我们按照故事的情节发展一步一步地实现程序。初期的时候,丑小鸭表现得很另类,叫声不同,外形不同,致使周围的亲戚、朋友都对她鄙视,那我们来建立这个过程,由于丑小鸭的本质就是一个天鹅,那我们就先生成一个天鹅的接口,如代码清单31-7所示。
1700477326
1700477327 代码清单31-7 天鹅接口
1700477328
1700477329 public interface Swan{
1700477330
1700477331 //天鹅会飞
1700477332
1700477333 public void fly();
1700477334
1700477335 //天鹅会叫
1700477336
1700477337 public void cry();
1700477338
1700477339 //天鹅都有漂亮的外表
1700477340
1700477341 public void desAppaearance();
1700477342
1700477343 }
1700477344
1700477345 我们定义了天鹅的行为,都会飞行、会叫,并且可以描述她们漂亮的外表。丑小鸭是一只白天鹅,是”is-a”的关系,也就是需要实现这个接口了,其实现如代码清单31-8所示。
1700477346
1700477347 代码清单31-8 丑小鸭
1700477348
1700477349 public class UglyDuckling implements Swan{
1700477350
1700477351 //丑小鸭的叫声
1700477352
1700477353 public void cry(){
1700477354
1700477355 System.out.println(“叫声是克噜——克噜——克噜”);
1700477356
1700477357 }
1700477358
[ 上一页 ]  [ :1.700477309e+09 ]  [ 下一页 ]