导航

装饰模式(Decorator Pattern) 学习体会

Posted on 2007-12-03 14:17  康康  阅读(214)  评论(0编辑  收藏  举报
这里我只谈自己学习该模式后的感受。不是向大家介绍该模式,更不是教大家如何使用该模式。

首先请仔细体味一下下面三个类结构图的演变过程:



                   
1




                    
2




                    
3
(
截取自TerryLee 大侠的.Net 设计模式一文)

 1)的Log接口有两大功能子类:以数据库方式( DatabaseLog ) 以文本方式(TextFileLog)来记录日志信息。
2)为Log接口扩展了一个新接口 LogWarpper(这里应该是TerryLee 大侠的笔误,应该是Wrapper:包装器),同时与原接口(Log)相比几乎没有什么变化,只是增加了一个对Log类的引用。
3)又有两个功能子类继承了LogWarpper接口,注意这里扩展了原Log类的功能:错误严重级别(LogErrorWarpper)和日志优先级(LogPriorityWarpper)。

真正的变化来了,哈哈,请看下面的代码
Log log = new DatabaseLog();
LogWrapper lew2 = new LogErrorWrapper(log);
LogWrapper lpw2 = new LogPriorityWrapper(lew2); //这里是lew2
//
同时扩展了错误严重级别和优先级别
lpw2.Write("Log Message");

大家看到这个结果有什么神奇变化了吗?结果是我们的日志结果具备了三大功能了:a. 数据库方式 b. 拥有错误等级控制  c. 拥有优先级别控制 。若是我们继续用新的子类来扩展 LogWarpper 接口,并在上面的代码后面继续

 
LogNewFunctionWrapper lnw2 = new LogNewFunctionWrapper (lpw2 );

就可以实现增加新功能的目的了,哈哈。
设计模式不愧为前人的智慧结晶啊。