`
java苹果+番茄
  • 浏览: 65874 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

模板方法(Template Method)模式【行为模式第十篇】

 
阅读更多
模板方法(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());
			}
		}
分享到:
评论
1 楼 shaozhi_jinni 2011-12-15  
[b][/b][i][/i][u][/u]
引用
引用
[img] [/url][url][flash=200,200][/flash]
[/img]

相关推荐

    [Java设计模式(第2版)(Design.Patterns.in.Java).John.Metsker

    第21章 模板方法(template method)模式 182 第22章 状态(state)模式 193 第23章 策略(strategy)模式 204 第24章 命令(command)模式 213 第25章 解释器(interpreter)模式 221 第26章 扩展型模式介绍 236 第27章 装饰...

    Delphi模式编程第一分卷

    第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章 循序渐进:职责链模式 ...

    Delphi模式编程第二分卷

    第25章 模板方法模式(Template Method) 25.1 模式解说 25.2 结构与用法 25.2.1 模式结构 25.2.2 代码模板 25.2.3 问题讨论 25.3 范例与实践 25.3.1 模板方法在离线数据库系统中的应用 25.3.2 范例...

    研磨设计模式(完整带书签).part2.pdf

    第16章 模板方法模式(Template Method) 第17章 策略模式(Strategy) 第18章 状态模式(State) 第19章 备忘录模式(Memento) 第20章 享元模式(Flyweight) 第21章 解释器模式(Interpreter) 第22章 装饰模式...

    07-使用代理快速接入第三方库(1).html

    模板方法模式( Template Method ) 观察者模式( Observer ) 迭代子模式( Iterator ) 责任链模式( Chain of Responsibility ) 命令模式( Command ) 备忘录模式( Memento ) 状态模式( State ) 访问者模式...

    研磨设计模式(完整带书签).part1.pdf

    第16章 模板方法模式(Template Method) 第17章 策略模式(Strategy) 第18章 状态模式(State) 第19章 备忘录模式(Memento) 第20章 享元模式(Flyweight) 第21章 解释器模式(Interpreter) 第22章 装饰模式...

    设计模式--C++

    5.10 TEMPLATE METHOD(模板方法)—类行为型模式 214 5.11 VISITOR(访问者)—对象行为型模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被分布 229 ...

    设计模式可复用面向对象软件的基础.zip

    5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被分布 229 ...

    《设计模式》中文版(23个设计模式的介绍与运用)

    5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被分布 229 ...

    GOLF设计模式(C++语言版)

    5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被...

    设计模式(.PDF)

    5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被分布 229 ...

    Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides23种设计模式

    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 ...

    研磨设计模式-part2

    第16章 模板方法模式(Template Method) 第17章 策略模式(Strategy) 第18章 状态模式(State) 第19章 备忘录模式(Memento) 第20章 享元模式(Flyweight) 第21章 解释器模式(Interpreter) 第22章 装饰模式...

    设计模式文档

    5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被分布 229 ...

    研磨设计模式-part4

    第16章 模板方法模式(Template Method) 第17章 策略模式(Strategy) 第18章 状态模式(State) 第19章 备忘录模式(Memento) 第20章 享元模式(Flyweight) 第21章 解释器模式(Interpreter) 第22章 装饰模式...

    研磨设计模式-part3

    第16章 模板方法模式(Template Method) 第17章 策略模式(Strategy) 第18章 状态模式(State) 第19章 备忘录模式(Memento) 第20章 享元模式(Flyweight) 第21章 解释器模式(Interpreter) 第22章 装饰模式...

    ASP.NET设计模式-杨明军译(源码)

    第10章 需求和基础设施 10.1 Agatha服装店需求 10.1.1 Product Catalog和Basket截屏 10.1.2 顾客账号屏幕 10.1.3 结账屏幕 10.1.4 缓存和日志 10.2 架构 10.3 小结 第11章 创建商品目录 11.1 创建产品...

    研磨设计模式.part3(共4个)

    第16章 模板方法模式(Template Method) 第17章 策略模式(Strategy) 第18章 状态模式(State) 第19章 备忘录模式(Memento) 第20章 享元模式(Flyweight) 第21章 解释器模式(Interpreter) 第22章 ...

Global site tag (gtag.js) - Google Analytics