Template Method(模板方法)
Posted 46cxf
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Template Method(模板方法)相关的知识,希望对你有一定的参考价值。
14. Template Method(模板方法)
14.1 定义
定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
14.2 优点
■ 封装不变的部分,扩展可变部分。不变的部分封装到父类中实现,而可变的部分则可以通过继承进行扩展。
■ 提取公共部分代码,便于维护。将公共部分的代码抽取出来放在父类中,维护时只需要修改父类中的代码。
■ 行为由父类控制,子类实现。模板方法模式中的基本方法是由子类实现的,因此子类可以通过扩展增加相应的功能,符合开闭原则。
14.3 场景使用
■ 多个子类有公共方法,并且逻辑基本相同时。
■ 可以把重要的、复杂的、核心算法设计为模板方法,周边的相关细节功能则由各个子类实现。■ 重构时,模板方法模式是一个经常使用的模式,将相同的代码抽取到父类中。
14.4 源码例程
1 #include<iostream> 2 using namespace std; 3 //抽象模板 4 class Account{ 5 private: 6 string m_accountNumber; 7 public: 8 Account(){ 9 10 } 11 Account(string number){ 12 m_accountNumber = number; 13 } 14 double calculateAmount(string accountType,string m_accountNumber){ 15 return 67676.0D; 16 } 17 //模板方法,获取账号利息 18 double calculateInterest(){ 19 string accountType = getAccountType(); 20 double interestRate = getInterestRate(); 21 double amount = calculateAmount(accountType,m_accountNumber); 22 return amount*interestRate; 23 } 24 protected: 25 virtual string getAccountType() = 0; 26 virtual double getInterestRate() = 0; 27 }; 28 //具体模板 29 class DemandAccount:public Account{ 30 protected: 31 string getAccountType(){ 32 return "活期"; 33 } 34 double getInterestRate(){ 35 return 0.005D; 36 } 37 }; 38 //具体模板 39 class FixedAccount:public Account{ 40 protected: 41 string getAccountType(){ 42 return "定期"; 43 } 44 double getInterestRate(){ 45 return 0.025D; 46 } 47 };
以上是关于Template Method(模板方法)的主要内容,如果未能解决你的问题,请参考以下文章
设计模式之模板方法模式(Template Method)详解及代码示例