模板方法(Template Method)模式
模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造子的形式实现,然后声明一些抽象方法来迫使子类
实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意
一、涉及到的角色
抽象模板角色有如下责任:
1、定义了一个或多个抽象操作,以便让子类实现。这些抽象操作叫做基本操作,它们是一个顶极逻辑的组成步骤。
2、定义并实现了一个模板方法。这个模板方法一般是一个具体方法,它给出了一个顶极逻辑的骨架,而逻辑的组成
步骤在相应的抽象操作中,推迟到子类实现。顶极逻辑也有可能调用一些具体方法。
具体模板角色有如下责任:
1、实现父类所定义的一个或多个抽象方法,它们是一个顶极逻辑的组成步骤。
2、每一个抽象模板角色都可以有任意多个具体模板角色与之对应,而每一个具体模板角色可以给出这些抽象方法(也就
是顶极逻辑的组成步骤)的不同实现,从而使得顶极逻辑的实现各不相同。
//抽象模板类
public abstract class AbstractClass{
//模板方法的声明和实现
public void TemplateMethod(){
//调用基本方法(由子类实现,以下都是)
doOperation1();
doOperation2();
doOperation3();(已经实现)
}
protected abstract void doOperation1();
protected abstract void doOperation2();
protected abstract void doOperation3(){
//................
}(已经实现)
}
//具体模板类
public class ConcreteClass extends AbstractClass{
public void doOperation1(){
System.out.println("doOperation1()");
}
public void doOperation2(){
//doOperation3();像这样的调用不要发生
System.out.println("doOperation2()");
}
}
二、一个帐户存储的例子
//抽象类
public abstratc class Account{
protected String accountNumber;
public Account(){
accountNumber = null;
}
public Account(String accountNumber){
this.accountNumber = accountNumber;
}
//模板方法,计算利息数额
public final double calculateInterest(){
double interestRate = doCalculateInterestRate();
String accountType = doCalculateAccountType();
double amount = calculateAmount(accountType,accountNumber);
return amount*interestRate;
}
//基本方法留给子类实现
protected abstract String doCalculateAccountType();
protected abstract double doCalculateInterestRate();
//基本方法,已经实现
public final double calculateAmount(String accountType,double accountNumber){
//从数据库中取数据
return 7243.00D;
}
}
//具体子类
public class MoneyMarketAccount extends Account{
public String doCalculateAccountType(){
return "Money Market";
}
public double doCalculateInterestRate(){
return 0.045D;
}
}
public class CDAccount extends Account{
public String doCalculateAccountType(){
return "Certificate of Deposite";
}
public double doCalculateInterestRate(){
return 0.065D;
}
}
//客户端
public class Client{
private static Account acct = null;
public static void main(String args[]){
acct = new MoneyMarketAccount();
System.out.println("Interest from Money Market account" + acct.calculateInterest());
acct = new CDAccount();
System.out.println("Interest from CD account" + acct.calculateInterest());
}
}
分享到:
相关推荐
在给定的“TemplateMethod”文件中,可能包含了一个关于如何在Java或者其他编程语言中实现模板方法模式的示例代码。这个例子可能会演示如何定义一个抽象类,包含模板方法和抽象方法,以及创建一个或多个子类来定制...
模板模式是一种行为设计模式,它使你能在不破坏封装性的前提下,定义执行算法的框架,而将一些步骤延迟到子类中。这样,你就能创建一个可复用的框架,将具体步骤留给子类来实现。这个模式的核心思想是抽象类定义了一...
**模板方法模式(Template Method Pattern)**是一种行为设计模式,它在面向对象编程中扮演着重要角色。在Java中,这种模式允许我们定义一个算法框架,而将具体步骤的实现延迟到子类中。模板方法模式是基于继承的,...
工厂方法模式(Factory Method) 5. 原型模式(Prototype)结构型: 6. 适配器模式(Adapter Pattern) 7. 桥接模式(Bridge Pattern) 8. 装饰模式(Decorator Pattern) 9. 组合模式(Composite Pattern) 10. 外观模式...
第21章 模板方法(template method)模式 182 第22章 状态(state)模式 193 第23章 策略(strategy)模式 204 第24章 命令(command)模式 213 第25章 解释器(interpreter)模式 221 第26章 扩展型模式介绍 236 第27章 装饰...
第25章 模板方法模式(Template Method) 25.1 模式解说 25.2 结构与用法 25.2.1 模式结构 25.2.2 代码模板 25.2.3 问题讨论 25.3 范例与实践 25.3.1 模板方法在离线数据库系统中的应用 25.3.2 范例小结 第...
第16章 按部就班:模板方法模式 (TemplateMethod) 第17章 风吹草动:观察者模式 (Observer) 第18章 变化多端:状态模式 (State) 第19章 明修栈道,暗度陈仓:策略模式 (Strategy) 第20章 循序渐进:职责链模式 ...
第25章 模板方法模式(Template Method) 25.1 模式解说 25.2 结构与用法 25.2.1 模式结构 25.2.2 代码模板 25.2.3 问题讨论 25.3 范例与实践 25.3.1 模板方法在离线数据库系统中的应用 25.3.2 范例...
第16章 模板方法模式(Template Method) 第17章 策略模式(Strategy) 第18章 状态模式(State) 第19章 备忘录模式(Memento) 第20章 享元模式(Flyweight) 第21章 解释器模式(Interpreter) 第22章 装饰模式...
模板方法模式( Template Method ) 观察者模式( Observer ) 迭代子模式( Iterator ) 责任链模式( Chain of Responsibility ) 命令模式( Command ) 备忘录模式( Memento ) 状态模式( State ) 访问者模式...
第16章 模板方法模式(Template Method) 第17章 策略模式(Strategy) 第18章 状态模式(State) 第19章 备忘录模式(Memento) 第20章 享元模式(Flyweight) 第21章 解释器模式(Interpreter) 第22章 装饰模式...
模板方法模式 (Template Method Pattern) 模板方法模式是一种行为型模式,它定义了一个操作中的算法骨架,将一些步骤延迟到子类中。模板方法让子类可以重新定义算法的某些步骤,而不改变算法的整体结构。这种模式...
十、模板方法模式(Template Method) 模板方法模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 这些设计模式是软件开发中的宝贵...
5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被分布 229 ...
5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被分布 229 ...
5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被...
5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被分布 229 ...
5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被分布 229 ...
5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被分布 229 ...