一、概述
在软件开发中,对某一项操作往往有固定的算法结构,而具体的子步骤会因为不同的需要而有所不同。如何可以在稳定算法结构的同时来灵活应对子步骤变化的需求呢?
二、模板方法
模板方法是一种常见的设计模式,它定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
模板方法的结构图如下

AbstractClass是抽象类,定义了抽象的操作
ConcreteClass实现了抽象操作中与子类相关的特定步骤。
三、示例
在这里以实现一个公司的薪资系统为例介绍一下模板方法的应用。
首先定义抽象类,一般建议将抽象的操作定义为非虚public方法,将子类需要定义的特定步骤定义为抽象的protected方法。

 1 publicabstractclass Employee
2 {
3 publicvoid GetSalary()
4 {
5 GetBasicSalary();
6 AddBonus();
7 }
8
9 protectedabstractvoid GetBasicSalary();
10 protectedabstractvoid AddBonus();
11 }

接着分别实现经理和CEO的薪资

 1 publicclass Manager : Employee
2 {
3 protectedoverridevoid GetBasicSalary()
4 {
5 Console.WriteLine("Get Manager Basic Salary");
6 }
7
8 protectedoverridevoid AddBonus()
9 {
10 Console.WriteLine("Add Manager Bonus");
11 }
12 }
13
14 publicclass CEO : Employee
15 {
16 protectedoverridevoid GetBasicSalary()
17 {
18 Console.WriteLine("Get CEO Basic Salary");
19 }
20
21 protectedoverridevoid AddBonus()
22 {
23 Console.WriteLine("Add CEO Bonus");
24 }
25 }
 

最新文章

  1. Java GC系列
  2. ssl
  3. JAVA实现发送电子邮件
  4. JS 中没有按地址(引用)传递,只有按值传递
  5. [zt]系统中常用MIPS指令
  6. ubuntu下搭建samba服务器
  7. [Git] 快速签出与更新所有远程分支.md
  8. EF实体框架之CodeFirst五
  9. c#中执行多条sql语句【ORA-00911: 无效字符】
  10. NPOI的版本查看
  11. iOS UI_APPEARANCE_SELECTOR
  12. 在mysql 中两种锁定问题
  13. flex 错误信息类型及解决方法
  14. J2EE进阶(十六)Hibernate 中getHibernateTemplate()方法使用
  15. 【RL-TCPnet网络教程】第18章 BSD Sockets基础知识
  16. Pandas系列(十六)- 你需要学会的骚操作
  17. .Net QQ互联教程
  18. HTML5标签选择,图文混排使用dl dt dd
  19. JS XMLHttpRequesst对象 http post的五种请求状态
  20. Centos7 Install Kubernetes

热门文章

  1. jsp:forward response.sendRedirect
  2. web开发必备-网络基础知识---记录一下
  3. WPF的定时器
  4. 【jquery】一款不错的音频播放器——Amazing Audio Player
  5. ch6 影响 MySQLServer 性能的相关因素
  6. sruts2:单个文件上传,多个文件上传(属性驱动)
  7. exerunexplorer.exe
  8. 如何安装最新版本的memcached
  9. 查看、关闭linux自启动网络服务
  10. 使用jQuery开发一个带有密码强度检验的超酷注册页面