一、目的

模板方法模式把不变行为搬到超类中,从而去除了子类中的重复代码。

二、定义

模板方法模式:在一个抽象类中定义一个操作的算法骨架,将算法骨架中某些特定的操作延迟到子类中实现。

模板方法使得子类在不改变一个算法骨架的前提下,重新定义算法的某些特定步骤。

三、场景

现实生活中,我们炒菜一般遵循一个特定的步骤,无论炒什么菜,基本步骤是一样的,只是菜品不一样而已,下面我我们用模板方法模式来模拟这一场景。

四、实现

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace DesignMode_TemplateMethod
 8 {
 9     public abstract class CookVegetable
10     {
11         // 模板方法,不要把模版方法定义为Virtual或abstract方法,避免被子类重写,防止更改流程的执行顺序
12         public void CookVegetableTemplate()
13         {
14             Console.WriteLine("炒蔬菜的模板方法");
15             PourOil();
16             HeatOil();
17             PourVegetable();//放入何种蔬菜由具体的子类决定
18             PourSalt();
19             StirFry();
20         }
21
22         public void PourOil()
23         {
24             Console.WriteLine("往锅里倒油");
25         }
26         public void HeatOil()
27         {
28             Console.WriteLine("把油加热");
29         }
30
31         // 油热了之后倒蔬菜下去,具体哪种蔬菜由子类决定
32         public abstract void PourVegetable();
33
34         public void PourSalt()
35         {
36             Console.WriteLine("放入精盐");
37         }
38         public void StirFry()
39         {
40             Console.WriteLine("翻炒");
41         }
42     }
43
44     public class CookCabbage : CookVegetable
45     {
46         public override void PourVegetable()
47         {
48             Console.WriteLine("倒入大白菜");
49
50         }
51     }
52     public class CookPotato : CookVegetable
53     {
54         public override void PourVegetable()
55         {
56             Console.WriteLine("倒入马铃薯");
57         }
58     }
59     class Program
60     {
61         static void Main(string[] args)
62         {
63             CookPotato cookPotato = new CookPotato();
64             CookCabbage cookCabbage = new CookCabbage();
65
66             cookPotato.CookVegetableTemplate();
67             Console.WriteLine("********************");
68             cookCabbage.CookVegetableTemplate();
69
70             Console.ReadLine();
71         }
72     }
73 }

View Code

运行结果如下:

五、类图

转载于:https://www.cnblogs.com/3xiaolonglong/p/9609796.html

C#设计模式---模板方法模式(Template Method Pattern)相关推荐

  1. 设计模式之模板方法模式(Template Method Pattern)

    模式的定义与特点 模板方法(Template Method)模式的定义如下:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤.它 ...

  2. 模板方法模式(Template Method Pattern)学习笔记

    模板方法模式可以所是最为常见的一种设计模式了,出乎很多人意料的是,很多人已经在他们的代码中用到了模板方法模式而没有意识到自己用到了这个模式,模板方法模式几乎可以在所有的抽象基类中找到. 通过模板方法模 ...

  3. 使用 C# (.NET Core) 实现模板方法模式 (Template Method Pattern)

    本文的概念内容来自深入浅出设计模式一书. 项目需求 有一家咖啡店, 供应咖啡和茶, 它们的工序如下: 咖啡: 茶: 可以看到咖啡和茶的制作工序是差不多的, 都是有4步, 其中有两步它们两个是一样的, ...

  4. 趣谈设计模式 | 模板方法模式(Template Method):封装不变部分,扩展可变部分

    文章目录 案例:房屋建造 模板方法模式 模板方法模式与策略模式 总结 完整代码与文档 这个设计模式过于简单,所以不是很好举例- 案例:房屋建造 假设我们是建筑公司中的规划者,负责设定建筑方案,在初期我 ...

  5. 模板方法模式(Template Method Pattern)

    模板方法模式: (就是在抽象基类中定一个复用的方法!) 在一个方法中定一个算法的骨架,而将一些步骤延迟到子类中. 模板方法使得子类可以再不改变算法结构的情况下,重新定义算法中的某些步骤. 实例: 泡茶 ...

  6. Net设计模式实例之模板方法模式(Template Mothed Pattern)(1)

    一.模板方法模式简介(Brief Introduction) 模板方法模式(Template Method Pattern),定义一个操作中的算法骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不 ...

  7. 模板方法模式 Template method 行为型 设计模式(二十六)

    模板方法模式 Template method 上图为网上百度的一份简历模板截图 相信大家都有求职的经历,那么必然需要简历,写简历的时候,很可能你会网上检索一份简历模板,使用此模板的格式,然后替换为你的 ...

  8. JAVA设计模式(14) —行为型模板方法模式(Template Method)

    1 定义: 模板方法模式(Template Method) Define the skeleton of an algorithm in anoperation, deferring some ste ...

  9. java 模板方法_设计模式(java实现)_模板方法模式(Template method)

    设计模式(java实现)_模板方法模式(Template method) 模板方法模式是编程中经常用到到的模式.它定义了一个操作中的算法骨架,将某些步骤延迟到子类中实现.这样,新的子类可以在不改变一个 ...

  10. java tea bag_设计模式系列教程—Template Method Pattern(模板方法模式)

    9 Template Method Pattern(模板方法模式) 前言:封装步骤的算法. Vander作为老板,凡是亲力亲为,他新开了家咖啡店,这是他招牌咖啡卡布奇诺的冲泡方法: 1.把水煮沸 2. ...

最新文章

  1. git全局ignore
  2. Matlab图像剪切,超出图像区域指定颜色填充
  3. C#四种相等性判断方法 equals,referenceEquals
  4. leetcode860. 柠檬水找零
  5. java之单例设计模式
  6. es 使用ik停词_ES使用IK分词器
  7. PMP 考点 第五章 项目范围管理
  8. R语言数据可视化案例(世界杯球员信息数据可视化)
  9. 计算机系统缺什么安装CAD闪退咋办,怎么处理CAD启动后闪退,求大神级人物解决...
  10. MySQL创建表和约束条件(四)
  11. canvas 画布画太极图和钟表
  12. Linux下vi修改行距,调整label中text显示的行间距
  13. SAP OBY8 删除会计科目表报错 Message no. FC095
  14. VUE 自定义日历+切换上下月+点击事件
  15. OOAD-设计模式(四)结构型模式之适配器、装饰器、代理模式
  16. 删除了其他软件盘或仓库盘的EFI引导文件,导致主硬盘系统盘无法启动
  17. 阿里如何做好双11技术保障?大队长霜波分享4点经验(转自阿里技术)
  18. 让GAN再次伟大!拖一拖关键点效果让人惊艳,汤晓鸥弟子的DragGAN爆火!
  19. 白盒测试——基本路径测试
  20. 【考证】免费的证书 : PMEC(项目管理的认证) by MSI

热门文章

  1. java多线程的api_java多线程之:线程对象一些api
  2. android刷新蓝牙缓存,如何使用GattServer以编程方式清除蓝牙缓存
  3. idea中未被识别的maven项目,如何手动添加
  4. 大工17春计算机文化基础在线测试3,大工17春《计算机文化基础》在线测试3满分答案...
  5. 编译GDAL支持ArcObjects
  6. Maven——安装(二)
  7. C#对象序列化与反序列化
  8. Java jta 原理_分布式事务JTA实现Atomikos与Spring集成实践
  9. 关于Android Studio Arctic Fox版本找不到Database Inspection这件事
  10. 肇庆市二技学校计算机电算化,肇庆市有那些技术学校