这里我只谈自己学习该模式后的感受。不是向大家介绍该模式,更不是教大家如何使用该模式。
首先请仔细体味一下下面三个类结构图的演变过程:

(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 );
就可以实现增加新功能的目的了,哈哈。
设计模式不愧为前人的智慧结晶啊。
首先请仔细体味一下下面三个类结构图的演变过程:

(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 );
就可以实现增加新功能的目的了,哈哈。
设计模式不愧为前人的智慧结晶啊。