设计模式之九(模版方法模式)
2023-09-14 08:58:28 时间
前言
模版方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模版方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
结构图
代码实现
AbstractClass是抽象类,其实也就是一抽象类,定义并实现了一个模版方法,这个模版方法一般是一个具体方法,它给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。顶级逻辑也有可能调用一些具体方法。
public abstract class AbstractClass { public abstract void PrimitiveOperation1(); public abstract void PrimitiveOperation2(); public void TemplateMethod() { PrimitiveOperation1(); PrimitiveOperation2(); Console.WriteLine(""); } }
ConcreteClassA,实现父类所定义的一个或多个抽象方法。每一个AbstractClass都可以有任意多个ConcreteClass与之对应,而每一个ConcreteClass都可以给出这些抽象方法(也就是顶级逻辑的组成步骤)的不同实现,从而使得顶级逻辑的实现各不相同。
public class ConCreteClassA : AbstractClass { public override void PrimitiveOperation1() { Console.WriteLine("具体类A方法1实现"); } public override void PrimitiveOperation2() { Console.WriteLine("具体类A方法2实现"); } } public class ConCreteClassB: AbstractClass { public override void PrimitiveOperation1() { Console.WriteLine("具体类B方法1实现"); } public override void PrimitiveOperation2() { Console.WriteLine("具体类B方法2实现"); } }
客户端调用
class Program { static void Main(string[] args) { AbstractClass Test; Test = new ConCreteClassA(); Test.TemplateMethod(); Test = new ConCreteClassB(); Test.TemplateMethod(); Console.ReadLine(); } }
运行结果如下
总结
当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。我们通过模版方法模式把这些行为搬移到单一的地方,这些帮助子类摆脱重复的不变行为的纠缠。
相关文章
- 设计模式(三)—— 工厂方法模式
- 工厂方法模式
- 简介Python设计模式中的代理模式与模板方法模式编程
- 《Android源码设计模式》--工厂方法模式
- PYTHON设计模式,创建型之工厂方法模式
- 工厂模式的Assembly.Load(path).CreateInstance(className)出错解决方法
- 简介Python设计模式中的代理模式与模板方法模式编程
- C#设计模式——工厂方法模式(Factory Method Pattern)
- 《Android源码设计模式》--模板方法模式
- [Head First设计模式]云南米线馆中的设计模式——模版方法模式
- 【java设计模式】之 模板方法(Template Method)模式
- Atitit 知识搜索 信息检索的方法总结 目录 1. 目录搜索1 1.1. 向下同级搜索1 1.2. 向上目录抽象搜索1 2. hash搜索模式1 2.1. 关键词搜索 主题搜索1 2
- Atitit. 软件设计 模式 变量 方法 命名最佳实践 vp820 attilax总结命名表大全
- 【项目实战】处理并行编程的经典方法——Fork/Join模式
- Java 分割字符串的方法String.split()底层原理与使用
- 设计模式 - 模板方法模式(template method pattern) 具体解释
- 设计模式学习笔记-工厂方法模式
- PostgreSQL的学习心得和知识总结(七十六)|深入理解PostgreSQL数据库客户端工具psql元命令 扩展表格式化模式 的作用原理和使用方法