模版方法模式/Template Method
2013-08-27 12:00
162 查看
模版方法模式/Template
Method
意图/适用场景:
模版方法模式其实是一种应用很广泛的模式,特别是在使用抽象类的时候。
模版方法模式中必然有一个核心的抽象类,不能是接口。声明一些抽象方法,这些方法由子类来做各不相同的实现;也可以是一些非抽象的方法,这些方法只是做为默认的实现,子类应该覆盖它们。
此外,还要定义一个或多少具体的方法,它们实现一些逻辑,调用前面提到的抽象或非抽象方法。这种方法就本模式中最重要的部分,这样的方法一般规定了调用其它抽象方法的逻辑,所以它是一个模版,这个方法就称为模版方法。
模版方法一般不被子类覆盖,否则就失去了“模版”的作用。
UML:
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
参与者:
抽象模版(Abstract Template):
定义了一个或多个抽象操作,以便让子类实现。这些抽象操作叫做基本操作。
定义并实现一个模版方法,这是一个具体的方法,给出了一个逻辑骨架,以固定的顺序和条件来调用其它的抽象方法。它定义了调用逻辑,是一个模版。
具体模版(Concrete Template):
以自己的方式实现父类所定义的抽象方法。
要点:
模版方法模式中的方法:
模版方法:
一个模版方法是定义在抽象类中的,把基本操作方法组合在一起形成一个总算法或一个总行为的方法。这个方法在抽象类中定义,并由子类不加修改地完全继承。
基本方法:
主要由子类来实现或重写,体现继承关系的方法称为基本方法。基本方法又可以分为三种:
抽象方法:必须由子类来实现的方法。
具体方法:具体方法仍然由抽象类实现,而子类并不实现或重写。有些具体方法可以起来工厂方法的作用。
钩子方法:钩子方法也由抽象类来实现,但这只是作为一种默认的实现,一般是空的。子类应该重新实现,如果没有的话,只是说明不需要。
示例代码:
Method
意图/适用场景:
模版方法模式其实是一种应用很广泛的模式,特别是在使用抽象类的时候。
模版方法模式中必然有一个核心的抽象类,不能是接口。声明一些抽象方法,这些方法由子类来做各不相同的实现;也可以是一些非抽象的方法,这些方法只是做为默认的实现,子类应该覆盖它们。
此外,还要定义一个或多少具体的方法,它们实现一些逻辑,调用前面提到的抽象或非抽象方法。这种方法就本模式中最重要的部分,这样的方法一般规定了调用其它抽象方法的逻辑,所以它是一个模版,这个方法就称为模版方法。
模版方法一般不被子类覆盖,否则就失去了“模版”的作用。
UML:
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
参与者:
抽象模版(Abstract Template):
定义了一个或多个抽象操作,以便让子类实现。这些抽象操作叫做基本操作。
定义并实现一个模版方法,这是一个具体的方法,给出了一个逻辑骨架,以固定的顺序和条件来调用其它的抽象方法。它定义了调用逻辑,是一个模版。
具体模版(Concrete Template):
以自己的方式实现父类所定义的抽象方法。
要点:
模版方法模式中的方法:
模版方法:
一个模版方法是定义在抽象类中的,把基本操作方法组合在一起形成一个总算法或一个总行为的方法。这个方法在抽象类中定义,并由子类不加修改地完全继承。
基本方法:
主要由子类来实现或重写,体现继承关系的方法称为基本方法。基本方法又可以分为三种:
抽象方法:必须由子类来实现的方法。
具体方法:具体方法仍然由抽象类实现,而子类并不实现或重写。有些具体方法可以起来工厂方法的作用。
钩子方法:钩子方法也由抽象类来实现,但这只是作为一种默认的实现,一般是空的。子类应该重新实现,如果没有的话,只是说明不需要。
示例代码:
[java] // Source code from file: AbstractTemplate.java package designPatterns.TemplateMethod; public abstract class AbstractTemplate { // abstract method protected abstract void abstractMethod(); // hook method, provide default implementation protected void hookMethod() { System.out.println("AbstractTemplate.hookMethod()"); } // template method public void templateMethod() { abstractMethod(); hookMethod(); } } // Source code from file: ConcreteClassA.java package designPatterns.TemplateMethod; public class ConcreteClassA extends AbstractTemplate { protected void abstractMethod() { System.out.println("ConcreteClassA.abstractMethod()"); } protected void hookMethod() { System.out.println("ConcreteClassA.hookMethod()"); } } // Source code from file: ConcreteClassB.java package designPatterns.TemplateMethod; public class ConcreteClassB extends AbstractTemplate { protected void abstractMethod() { System.out.println("ConcreteClassB.abstractMethod()"); } } // Source code from file: User.java package designPatterns.TemplateMethod; public class User { public static void main(String[] args) { AbstractTemplate a = new ConcreteClassA(); AbstractTemplate b = new ConcreteClassB(); a.templateMethod(); b.templateMethod(); } } [/java]
相关文章推荐
- 《大话设计模式》--考题抄错会做也白搭--模板方法模式<TemplateMethod>(10)
- Template Method Pattern 模版方法模式
- C++设计模式之十一--Template_Method模版方法模式
- Java与模式 模版方法模式 Template Method
- 24种设计模式--模版方法模式【Template Method Pattern】
- 二.Template Method Pattern(模版方法模式)
- 模板方法模式【Template Method Pattern 】
- 模版方法模式(Template Method Pattern)
- 设计模式 - 模版方法模式 Template Method
- 二十五.行为型设计模式——Template Method Pattern(模版方法模式)
- 二.Template Method Pattern(模版方法模式)
- 模版方法模式 Template Method Pattern
- 模版方法模式 Template Method Pattern — 穷人和富人的不同婚恋历程
- java_设计模式_模板方法模式_Template Method Pattern(2016-08-11)
- 模板强化Template Method & Singleton 模式
- Template Method Pattern 模版方法模式
- 设计模式之22 - 模板方法Template method
- 设计模式——模板方法模式( Template Method Pattern)
- 您的设计模式——模板方法模式【Template Method Pattern】
- 模板方法模式(Template Method Pattern)