模板方法模式:类的行为模式。一个抽象类,将部分逻辑以具体方法以及具体构造的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。它包括轮廓和具体逻辑,轮廓即为模板方法,具体逻辑为基本方法。
模板方法:定义在抽象类中,把基本操作方法组合在一起形成一个总的行为,由子类不加修改地完全继承下来。一个抽象类 可以有多个模板方法,一个模板方法可以调用任意多个具体方法。
基本方法:分为抽象方法、具体方法、钩子方法;具体方法由抽象类声明并实现,有些能起到工厂方法的作用。钩子方法由抽象类声明并实现,而子类回加以扩展。通常抽象类给出的是一个空实现或默认实现。
角色:
抽象模板角色:定义一个活多个抽象操作(基本操作),一边让子类实现;定义并实现一个模板方法。模板方法一般是一个具体方法,他给出了轮廓的骨架,而其中的逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。
具体模板角色:实现父类所定义的一个或多个抽象方法,他们是一个轮廓的组成步骤;每个抽象模板角色都可以有任意多个具体模板角色与之对应,而每一个具体模板角色都可以给出这些抽象方法的不同实现,从而使得轮廓的实现各不相同。
先来个例子:
package cn.design.pattern.demo.templatemethod.demo.interesrate;
public abstract class Account {
protected String accountNum;
public Account() {
accountNum = null;
}
public Account(String accountNum) {
this.accountNum = accountNum;
}
/**
* 模板方法
* @return
*/
protected final double calculateRest() {
double insertRate = doCalculateInterRate();
String accountType = doCalculateAccountType();
double amount = calculateAmount(accountType, accountNum);
return amount * insertRate;
}
/**
* 两个基本方法, 由子类实现
* @return
*/
protected abstract String doCalculateAccountType();
protected abstract double doCalculateInterRate();
/**
* 基本方法,已经实现
* @param accountType
* @param accountNum
* @return
*/
protected final double calculateAmount(String accountType, String accountNum) {
// 可能读取数据库数据
return 12334D;
}
}
package cn.design.pattern.demo.templatemethod.demo.interesrate;
public class MarketAccount extends Account {
@Override
protected String doCalculateAccountType() {
return null;
}
@Override
protected double doCalculateInterRate() {
return 0;
}
}
package cn.design.pattern.demo.templatemethod.demo.interesrate;
public class CDAccount extends Account {
@Override
protected String doCalculateAccountType() {
return null;
}
@Override
protected double doCalculateInterRate() {
return 0;
}
}
在我们之前接触到得HttpServlet,正是用了模板方法模式:service方法是模板方法,其中调用doXXX方法,而doXXX方法则由子类实现具体业务。
分享到:
相关推荐
设计模式-模板方法模式(讲解及其实现代码)
设计模式--模板方法模式java例子
适合20分钟左右讲解的模板方法模式。 自己上课用的。
JAVA-设计模式-行为型模式-模板方法模式
1.当你想让客户端只扩展算法的特定步骤,而不是整个算法或其结构 2.当你有几个类包含几乎相同的算法,但有一些细微的差异时,请使用 1.你可以让客户端只覆盖大型算
c++设计模式-行为型模式-模板方法模式;qt工程;c++简单源码; 模板方法(Template Method)模式的定义如下:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重...
(1) 系统根据账号和密码验证用户信息,如果用户信息错误,系统显示出错提示 (2) 如果用户信息正确,则根据用户类型的不同使用不同的利息计算公式计算利息(如活期
java设计模式中的模板模式,纯Java代码
java的23种常用设计模式:模板方法模式
设计模式专题之(十三)模板模式---设计模式模板模式示例代码(python--c++)
#设计模式之模板方法 ###准备一个抽象类,将部分逻辑以具体方法的形式实现,然后声明一些抽象方法交由子类实现剩余逻辑,用钩子方法给予子类更大的灵活性。最后将方法汇总构成一个不可改变的模板方法
设计模式总结-模板设计模式,单例模式(singleTon)
设计模式的模板方法模式的例子,希望对大家有用~~~~~~~~
设计模式-工厂方法 讲解及其源码
PPT内容包括:内附代码,实例,方便理解。 继承、封装、多态、UML 设计模式02 设计模式03-创建型模式 ...设计模式16-策略模式、模板方法、访问者 此PPT实例便于理解,对于深入理解OO思想有很大帮助。
创建型模式,共五种:工厂方法模式、抽象工厂模式、...行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。