设计模式中的template method? (75分)

  • 主题发起人 powersite
  • 开始时间
P

powersite

Unregistered / Unconfirmed
GUEST, unregistred user!
[h1][red]正在看《设计模式》,觉得的确有醍醐灌顶的感觉!
但这书中很多地方太理论化了,而且鉴于篇幅,说的也不够详细。
我正在看template method,它主要是“定义一个操作中的算法的骨架,而将一些延迟到子类中”,
我的疑问在于,好像与抽象“abstract factory”不是一样吗?
书中举例:Application类和Document类,再根据具体情况,实例化具体的类,那岂不是与Factory模式一样了吗?
还是仅仅将factory放置到类创建阶段考虑,而将template method放置到“行为模式”具体对象操作中考虑?
请大家多多发言![/red][/h1]
 
刚从UMLCHINA中读到:转载如下:
作者:雪漫天
>首先,抽象工厂和模板方法所属类别不同,抽象工厂是创建型模式,而模板方法是行为型模式。
>创建型模式是用于创建对象使用的,抽象工厂的目的是为一系列产品定义创建规格,至于对象的创建,是在子类中完成的。
>而子类中需完成,整个产品的创建。这样,使用者无需关系其是怎么生产出来的,只需调用接口生产产品就可以了,通过替换工厂,就可以创建不同系列的产品。
>行为模式主要是用来改进算法或者通信机制的,这里的模板方法就是用来改善算法,他是定义算法的骨架,而将算法的具体部分放到子类中完成,子类中完成的是算法的某些片断。
>这样的效果是抽象出了算法的骨架。子类只需关心某些特定的步骤该如何处理,另外,也避免了不同的子类中的代码重复。
>
>第二点,抽象工厂是对象模式,而模板方法是类模式。
>这导致两个模式起作用的时机不同。
>对于抽象工厂,产品的创建可以延迟到运行的时候实现,
>而模板方法,你必须在编程的时候就实现,要么是A算法,要么是B算法,也就是必须在编译的时候就确定下来。
>
>二者的相识之处在于,都是使用了OO的多态属性,将具体的动作延迟到子类中完成。
>除了这点,再无相似之处了。
>而多态性是真个设计模式的基础,所以如果单单从这看,你会发觉很多模式都很相似。
>所以我们关注模式一定要关注其上下文和目的。
>
>其实对于模板方法,现在使用很多,如Borland的VCL或者MS的MFC中的事件处理机制,如OnCreate(),
>那就是一种模板方法,处理的骨架已经在框架中固定了,你重载的只是该处理中的一些片断。
 
顶部