(本人初学,欢迎看到这篇文章的大哥大姐批评指正)
这11种行为模式充分的体现了“面向对象”的特点,它将各种行为过程甚至状态看成对象并用类封装,将面向对象发挥到极致。
(1)职责链模式。该模式对查找过程进行了封装,通过链使得每个对象都有处理请求的可能,链上的每个对象只对自己感兴趣的请求作相应,这样就将寻找请求响应者的过程封装在了对象链里。链的结构如果在编译时刻被固定的话还好,不过要动态的维护这样一个链式结构还是有些难度的。
(2)命令模式。该模式对命令这一动作进行了封装。命令的发出者不需要知道自己发出的什么命令,而是调用自己所对应的命令对象的“执行”方法。在该模式下,我们可以方便的动态定制界面。还可以和备忘录模式一起实现“取消功能”,甚至做一个类似photoshop里的历史功能的命令脚本。
(3)解释器模式。我直接性没看懂啊,这种模式对哪种行为进行封装?我不懂正则表达式啊,希望有高人指点啊。
(4)迭代器模式。该模式对遍历过程进行了封装。这个蛮好理解的,因为C++的标准模板库STL就使用了iterator。STL里的迭代子重载了++,__运算符,使得遍历十分方便。
(5)中介模式。该模式对各对象之间的交互过程进行了封装。我个人感觉它很像是多极化行为化了的装饰模式。装饰模式在结构上为一个子系统提供简单接口,中介模式为多个对象接口进行了衔接。
(6)备忘录模式。撤销/重做这一伟大功能实现的基础啊。该模式奖励时状态封装到类中。
(7)观察者模式。该模式将对象之间的依赖更新过程进行了封装。书中举的文档视图结构在这种模式中方便的实现了对象解耦。MFC也支持一个文档多个视图的结构,我只是出学MFC,不知那其中是否有观察者啊。那位达人指点指点啊。
(8)状态模式。该模式对状态响应行为进行封装。每种状态都生成一个子类,每个子类处理本状态的响应。程序可以动态的根据状态生成子类。这种方式避免了大量的switch/case调用,提高了效率。但是该方法却生成了太多的子类,所以该模式的使用应该注意仔细权衡利弊。
(9)策略模式。该模式对实现一定功能的算法进行了封装。把完成同种功能的多个算法用多个子类封装起来,实现动态无耦合的算法改变。这种算法的隐蔽有些像函数指针啊。
(10)模板方法。不知道这里不叫做模板模式而叫做方法,可能是这种方法和语言有关吧。C++提供了模板支持,其他我不知啊。这种方法可以在保持原算法结构的前提下将实现延迟到子类。MFC里有的应该是这种模式吧,它的每个应用都是用模板使子类套用原来的CWinApp/CDocument/CView结构。好强啊,MFC。
(11)访问者模式。该模式将针对对象的各种操作封装到多个子类中。当我们要对某个对象进行操作时,便将这个对象当作参数调用访问这类的方法,个人感觉有点像C风格的函数调用,无疑也不利于类的封装。这种模式需要使用在操作多变但数据结构不变的地方。