码迷,mamicode.com
首页 > 其他好文 > 详细

Template Method(模板方法)

时间:2020-11-08 18:00:36      阅读:32      评论:0      收藏:0      [点我收藏+]

标签:控制   封装   重定义   分代   改变   可变   iostream   tin   turn   

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(模板方法)

标签:控制   封装   重定义   分代   改变   可变   iostream   tin   turn   

原文地址:https://www.cnblogs.com/46cxf/p/13944186.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!