黑马程序员技术交流社区

标题: 关于“设计模式” 跟 “模板方法模式”的联系和区别 [打印本页]

作者: 夏凡    时间: 2013-3-24 12:55
标题: 关于“设计模式” 跟 “模板方法模式”的联系和区别
本帖最后由 夏凡 于 2013-3-25 15:56 编辑

在毕老师的基础班视频里面,第七天——11课程里面讲了“模板方法模式”,跟之前讲到的“设计模式”有什么不同?
是“设计模式”强调的是思想,“模板方法模式”强调的是代码结构?还是?
两者有什么联系?
希望高手给总结一下
作者: 葛伟    时间: 2013-3-24 13:14
模板方法模式:定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

作者: 刘凯    时间: 2013-3-24 14:57
模板方法模式 是java设计模式中的一种
如楼上所说
“模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可以重定义该算法得某些特定步骤。 ”

java中的设计模式大概有23种  设计模式主要分三个类型:创建型、结构型和行为型。 模板方法模式属于 创建型
想了解更多的设计模式的东西,百度就出来了 , 很好找的
作者: lucy198921    时间: 2013-3-24 16:05
模版方法模式关键点在于抽象父类。抽象父类在模板方法中规定了顶级逻辑,顶级逻辑由许多具体的方法来实现完成。
在抽象父类中,规定好具体方法的接口参数,但并不给出其具体的实现。
继承抽象父类的子类根据不同的需求再来实现各种具体的方法。
就像做房子的总设计师一样,他只勾勒出整个房子的大体骨架,
但是不给出这栋房子中每个房间怎么设计,房子内部结构的设计细节,这些工作就交给了下面具体设计师。
具体设计师在总设计师已经完成设计的基础之上,然后完成剩下的房子内部细节设计。
细节设计师不能违背或者修改总设计师的设计,只能在其基础之上进一步的细化设计,使之成为一个完整的房子设计图,最终付诸实施。
模版方法模式主要涉及到两个角色-抽象模板和具体模板。

抽象模板,定义了模式中顶级的逻辑操作,子类继承实现抽象模板中尚未实现的抽象方法。但是抽象模板中一般给出了顶级逻辑操作,而且会声明为final,子类不能覆写该顶级逻辑操作;

具体模板,继承抽象模版,具体实现抽象模板中声明的抽象方法。多个具体模版继承自抽象父类,按照不同的需求实现抽象父类中声明的抽象方法,按照顶级逻辑的执行顺序完成所需的功能。

__________________________________________________________________
抽象模板:

public abstract class AbstractTemplate {
     
    public void Sign(){
        hash();
        signature();
    }
     
    public abstract void hash();
    public void signature(){};
    public void hook(){};
}

__________________________________________________________________

具体模板:

public class ConcreteTemplate extends AbstractTemplate {

    public void hash() {
             //with ID
    }
}

__________________________________________________________________

具体模板:

public class ConcreteTemplate2 extends AbstractTemplate{

    public void hash(){
        //without id
    }
}
具体模板继承自抽象的模板,将抽象模板中的抽象方法按照不同的需求来实现(带ID的哈希和不带ID的哈希)。然后按照顶级逻辑中的计算步骤,对哈希值进行签名,完成整个计算过程。
模板方法模式使用的继承机制。虽然OO提倡多用组合少用继承,但是该模式是对继承的有效合理的利用,达到很好的设计效果。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2