C# 计划模式(举动型模式):模板方法模式

打印 上一主题 下一主题

主题 799|帖子 799|积分 2397

C# 计划模式(举动型模式):模板方法模式

在开辟过程中,我们经常会碰到一类问题:一些操作的整体步调是固定的,但某些具体步调的实现会因为场景差别而有所变化。模板方法模式(Template Method Pattern)是一种举动型计划模式,能够很好地解决这类问题。
模板方法模式的界说

模板方法模式界说了一个算法的框架,并允许子类在不改变算法结构的情况下重新界说某些步调的实现。它通过将算法的可变部门延迟到子类中,使代码的复用性更高,扩展性更好。
模板方法模式的结构

模板方法模式包罗以下角色:

  • AbstractClass(抽象类): 界说算法的骨架,包罗模板方法和抽象方法。
  • ConcreteClass(具体子类): 实现抽象方法,提供特定的逻辑。
示例:咖啡和茶的制作流程

我们以制作咖啡和茶为例,两者的制作步调相似,但某些具体操作差别:

  • 烧水。
  • 冲泡饮品(咖啡或茶)。
  • 倒入杯中。
  • 添加配料(糖、牛奶或柠檬)。
代码实现

  1. using System;
  2. // 抽象类:饮品制作模板
  3. public abstract class BeverageTemplate
  4. {
  5.     // 模板方法:定义制作流程
  6.     public void PrepareBeverage()
  7.     {
  8.         BoilWater();
  9.         Brew();
  10.         PourInCup();
  11.         AddCondiments();
  12.     }
  13.     // 通用步骤:烧水
  14.     private void BoilWater()
  15.     {
  16.         Console.WriteLine("烧水中...");
  17.     }
  18.     // 通用步骤:倒入杯中
  19.     private void PourInCup()
  20.     {
  21.         Console.WriteLine("将饮品倒入杯中。");
  22.     }
  23.     // 抽象方法:冲泡饮品
  24.     protected abstract void Brew();
  25.     // 抽象方法:添加配料
  26.     protected abstract void AddCondiments();
  27. }
  28. // 具体类:咖啡
  29. public class Coffee : BeverageTemplate
  30. {
  31.     protected override void Brew()
  32.     {
  33.         Console.WriteLine("用热水冲泡咖啡。");
  34.     }
  35.     protected override void AddCondiments()
  36.     {
  37.         Console.WriteLine("添加糖和牛奶。");
  38.     }
  39. }
  40. // 具体类:茶
  41. public class Tea : BeverageTemplate
  42. {
  43.     protected override void Brew()
  44.     {
  45.         Console.WriteLine("用热水浸泡茶叶。");
  46.     }
  47.     protected override void AddCondiments()
  48.     {
  49.         Console.WriteLine("添加柠檬。");
  50.     }
  51. }
  52. // 测试代码
  53. class Program
  54. {
  55.     static void Main(string[] args)
  56.     {
  57.         Console.WriteLine("制作咖啡:");
  58.         BeverageTemplate coffee = new Coffee();
  59.         coffee.PrepareBeverage();
  60.         Console.WriteLine();
  61.         Console.WriteLine("制作茶:");
  62.         BeverageTemplate tea = new Tea();
  63.         tea.PrepareBeverage();
  64.     }
  65. }
复制代码
输出结果

  1. 制作咖啡:
  2. 烧水中...
  3. 用热水冲泡咖啡。
  4. 将饮品倒入杯中。
  5. 添加糖和牛奶。
  6. 制作茶:
  7. 烧水中...
  8. 用热水浸泡茶叶。
  9. 将饮品倒入杯中。
  10. 添加柠檬。
复制代码
模板方法模式的优缺点

优点


  • 代码复用性高: 提取通用代码到抽象类中,制止重复代码。
  • 机动性强: 子类可以机动实现具体步调,而无需改变算法结构。
  • 遵照开闭原则: 新增具体实现时,只需添加新子类,无需修改抽象类。
缺点


  • 继承关系局限: 如果抽象类发生变化,所有子类都须要修改。
  • 子类数量增加: 每个具体实现都须要一个子类。
实用场景


  • 一个操作有固定的步调,但某些步调须要子类定制化实现。
  • 有多个类的举动逻辑相似,但在细节实现上有所差别。
总结

模板方法模式是将不变的举动放在父类中,具体的实现延迟到子类中,从而实现了代码复用和机动扩展。在实际开辟中,例如工作流引擎、报表天生等场景,都可以看到模板方法模式的身影。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

冬雨财经

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表