C#设计模式——模板方法(Template Method)
2024-10-10 22:09:15
一、概述
在软件开发中,对某一项操作往往有固定的算法结构,而具体的子步骤会因为不同的需要而有所不同。如何可以在稳定算法结构的同时来灵活应对子步骤变化的需求呢?
二、模板方法
模板方法是一种常见的设计模式,它定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
模板方法的结构图如下
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 }
最新文章
- Java GC系列
- ssl
- JAVA实现发送电子邮件
- JS 中没有按地址(引用)传递,只有按值传递
- [zt]系统中常用MIPS指令
- ubuntu下搭建samba服务器
- [Git] 快速签出与更新所有远程分支.md
- EF实体框架之CodeFirst五
- c#中执行多条sql语句【ORA-00911: 无效字符】
- NPOI的版本查看
- iOS UI_APPEARANCE_SELECTOR
- 在mysql 中两种锁定问题
- flex 错误信息类型及解决方法
- J2EE进阶(十六)Hibernate 中getHibernateTemplate()方法使用
- 【RL-TCPnet网络教程】第18章 BSD Sockets基础知识
- Pandas系列(十六)- 你需要学会的骚操作
- .Net QQ互联教程
- HTML5标签选择,图文混排使用dl dt dd
- JS XMLHttpRequesst对象 http post的五种请求状态
- Centos7 Install Kubernetes