zoukankan      html  css  js  c++  java
  • 设计模式——模板模式

      模板模式——定义一个操作中算法的骨架,而降一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构既可以重定义该算法的某些特定步骤。

      模板模式时为了解决避免子类去重复一项操作而设计的一种模式,假如自己都有一个方法去现实一个操作,并且在子类创建对象时重复进行该操作,那么可以将该操作给父类,让父类去完成这些操作,统一输出。

      它通过把不变行为搬移到超类,去除子类中的重复代码,提供了一个很好的代码复用平台,下面是具体的实现方式。

    1.Template类,模板类,定义了一些由子类去实现的抽象方法,并且让子类实现了该方法后再统一的模板方法里去执行

     1 /// <summary>
     2 /// 模板抽象类
     3 /// </summary>
     4 public abstract class Template
     5 {
     6     //定义一些抽象方法,放到子类去实现
     7     public abstract void PrimitiveOperation1();
     8     public abstract void PrimitiveOperation2();
     9 
    10     /// <summary>
    11     /// 模板方法,给出了逻辑的骨架
    12     /// 逻辑的组成是一些相应的抽象操作,
    13     /// 它们都推迟到子类去实现
    14     /// </summary>
    15     public void TemplateMethod()
    16     {
    17         PrimitiveOperation1();
    18         PrimitiveOperation2();
    19 
    20         //这里也可以做一些额外的事
    21     }
    22 }
    Template.cs

    2.Operation类,子类,实现了模板类定义的抽象方法

     1 /// <summary>
     2 /// 继承模板的子类A
     3 /// </summary>
     4 class OperationA:Template
     5 {
     6     public override void PrimitiveOperation1()
     7     {
     8         //子类方法实现这个方法的操作
     9     }
    10 
    11     public override void PrimitiveOperation2()
    12     {
    13         //子类方法实现这个方法的操作
    14     }
    15 }
    16  /// <summary>
    17 /// 继承模板的子类B
    18 /// </summary>
    19 class OperationB : Template
    20 {
    21     public override void PrimitiveOperation1()
    22     {
    23         //子类方法实现这个方法的操作
    24     }
    25 
    26     public override void PrimitiveOperation2()
    27     {
    28         //子类方法实现这个方法的操作
    29     }
    30 }
    Operation.cs

    3.客户端代码,由父类去实例化子类,并且执行模板方法

     1 static void Main(string[] args)
     2 {
     3     //创建模板
     4     Template template;
     5 
     6     //实现子类
     7     template=new OperationA();
     8 
     9     //实现模板方法
    10     template.TemplateMethod();
    11 
    12     template=new OperationB();
    13     template.TemplateMethod();
    14 }
    Program.cs

                                                           以上内容部分参考程杰的《大话设计模式》一书

  • 相关阅读:
    我们都可以把它放 Sidecar 容器中,这样微服务具备了 Super power,一种超能力
    DP 状态 DP 转移方程 动态规划解题思路
    完全二叉树 原因 完全二叉树最后一层节点靠左的原因
    延时任务最佳实践方案总结
    b+ 树 只存储 索引
    埋点质量保障体系建设
    linux命令重定向>、>>、 1>、 2>、 1>>、 2>>、 <
    卡特兰数
    python 使用函数名的字符串调用函数(4种方法)_black-heart的专栏-CSDN博客 https://blog.csdn.net/mrqingyu/article/details/84403924
    12 | 服务注册与发现如何满足服务治理
  • 原文地址:https://www.cnblogs.com/Smilodon/p/3099096.html
Copyright © 2011-2022 走看看