模版方法(Template Method)模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造子的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模版方法的用意。

模版方式模式结构与角色

 

java common 模块命名 java中module name是什么_java common 模块命名

抽象模版(Abstract Template)角色的职责:

1、  定义了一个或多个抽象操作,以便让子类实现。这些抽象操作叫做基本操作,它们是定义一个顶级逻辑的组成步骤。

2、  定义并实现了一个模版方法。这个模板方法一般是一个具体方法,它给出了一个顶级逻辑的骨架。

具体模版(Concrete Template)角色的职责:

1、  实现父类所定义的一个或多个抽象方法,它们是一个顶级逻辑的组成步骤。

2、  每一个抽象模版角色都可以有任意多个具体模版角色与之对应,而每一个具体模版角色都可以给出这些抽象方法(也就是顶级逻辑的组成步骤)的不同实现,从而使得顶级逻辑的实现各不相同。

模版模式的关键:子类可以置换掉父类的可变部分,但是子类却不可以改变模版方法所代表的顶级逻辑。

模版方法中的方法可以分为两大类:模版方法(Template Method)和基本方法(Primitive Method)。

模版方法:一个模版方法是定义在抽象类中的,把基本操作方法组合在一起形成一个总算法或一个总行为的方法。子类不加以修改地完全继承下来。模版方法可以有多个。

基本方法:又可分为三种:抽象方法(Abstract Method)、具体方法(Concrete Method)和钩子方法(Hook Method)。基本方法的命名规则是以do开头。

抽象方法:一个抽象方法有抽象类声明,由具体子类实现。

具体方法:一个具体方法由抽象类声明并实现,而子类并不实现或置换。

钩子方法:一个钩子方法由抽象类声明并实现,而子类会加以扩展。通常抽象类给出的实现是一个空实现,作为方法的默认实现。

在对一个继承的等级结构做重构时,一个应当遵从的原则便是将行为尽量移动到结构的高端,而将状态尽量移动到结构的低端。

在等级结构中将接口与实现分隔开来,将抽象与具体分割开来的原则

1、  应当根据行为而不是状态定义一个类。也就是说,一个类的实现首先建立在行为的基础之上,而不是建立在状态的基础之上。

2、  在实现行为时,是用抽象状态而不是用具体状态。如果一个行为涉及到对象的状态时,使用间接的引用而不是直接的引用。换言之,应当使用取值方法而不是直接引用属性。

3、  给操作划分层次。一个类的行为应当放到一个小组核心方法(kernel methods)里面,这些方法可以很方便地在子类中加以置换。

将状态属性的确认推迟到子类中。不要再抽象类中过早地声明属性变量,应将它们尽量地推迟到子类中去声明。在抽象超类中,如果需要状态属性的话,可以调用抽象的取值方法,而将抽象的取值方法的实现放到具体子类中。