zoukankan      html  css  js  c++  java
  • 设计模式系列13:模板方法模式(Template Method Pattern)

    定义

    定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。    --《设计模式GoF》


    UML类图


    使用场景

    1. 有多个子类共有的方法,且逻辑相同,可以抽象到父类中作为模板方法实现,避免代码重复。
    2. 重要的,复杂的方法,可以考虑作为模板方法。


    C#代码实现

    using System;
     
    namespace DoFactory.GangOfFour.Template.Structural
    {
      /// <summary>
    
      /// MainApp startup class for Real-World 
    
      /// Template Design Pattern.
    
      /// </summary>
    
      class MainApp
    
      {
        /// <summary>
    
        /// Entry point into console application.
    
        /// </summary>
    
        static void Main()
        {
          AbstractClass aA = new ConcreteClassA();
          aA.TemplateMethod();
     
          AbstractClass aB = new ConcreteClassB();
          aB.TemplateMethod();
     
          // Wait for user
    
          Console.ReadKey();
        }
      }
     
      /// <summary>
    
      /// The 'AbstractClass' abstract class
    
      /// </summary>
    
      abstract class AbstractClass
    
      {
        public abstract void PrimitiveOperation1();
        public abstract void PrimitiveOperation2();
     
        // The "Template method"
    
        public void TemplateMethod()
        {
          PrimitiveOperation1();
          PrimitiveOperation2();
          Console.WriteLine("");
        }
      }
     
      /// <summary>
    
      /// A 'ConcreteClass' class
    
      /// </summary>
    
      class ConcreteClassA : AbstractClass
    
      {
        public override void PrimitiveOperation1()
        {
          Console.WriteLine("ConcreteClassA.PrimitiveOperation1()");
        }
        public override void PrimitiveOperation2()
        {
          Console.WriteLine("ConcreteClassA.PrimitiveOperation2()");
        }
      }
     
      /// <summary>
    
      /// A 'ConcreteClass' class
    
      /// </summary>
    
      class ConcreteClassB : AbstractClass
    
      {
        public override void PrimitiveOperation1()
        {
          Console.WriteLine("ConcreteClassB.PrimitiveOperation1()");
        }
        public override void PrimitiveOperation2()
        {
          Console.WriteLine("ConcreteClassB.PrimitiveOperation2()");
        }
      }
    }

    运行结果:

    image

  • 相关阅读:
    万亿级大数据平台的建设实践
    Java开发中的23种设计模式
    FileZilla更新服务器文件后浏览器没有刷新的一种常见情况
    Docker PHP7官方镜像安装Redies扩展
    Docker PHP7官方镜像安装Redies扩展
    Docker PHP7官方镜像安装Redies扩展
    Docker PHP7官方镜像安装Redies扩展
    iOS9.2.1 App从AppStore上下载闪退问题
    iOS9.2.1 App从AppStore上下载闪退问题
    iOS9.2.1 App从AppStore上下载闪退问题
  • 原文地址:https://www.cnblogs.com/mcgrady/p/10366564.html
Copyright © 2011-2022 走看看