zoukankan      html  css  js  c++  java
  • 设计模式学习笔记——模板方法模式(Template Method)

    1.特点:继承+重写解决代码重复问题。

    2.概念:定义一个操作中的算法的骨架,而将步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤。

    3.类图:

    4.程序实现:

    /// <summary>
        /// 抽象类
        /// </summary>
        public abstract class AbstractClass
        {
            // 一些抽象行为,放到子类去实现
            public abstract void PrimitiveOperation1();
            public abstract void PrimitiveOperation2();
    
            /// <summary>
            /// 模板方法,给出了逻辑的骨架,而逻辑的组成是一些相应的抽象操作,它们推迟到子类去实现。
            /// </summary>
            public void TemplateMethod()
            {
                PrimitiveOperation1();
                PrimitiveOperation2();
                Console.WriteLine("Done the method.");
            }
        }
    
        /// <summary>
        /// 具体类,实现了抽象类中的特定步骤
        /// </summary>
        public class ConcreteClassA : AbstractClass
        {
            /// <summary>
            /// 与ConcreteClassB中的实现逻辑不同
            /// </summary>
            public override void PrimitiveOperation1()
            {
                Console.WriteLine("Implement operation 1 in Concreate class A.");
            }
    
            /// <summary>
            /// 与ConcreteClassB中的实现逻辑不同
            /// </summary>
            public override void PrimitiveOperation2()
            {
                Console.WriteLine("Implement operation 2 in Concreate class A.");
            }
        }
    
        /// <summary>
        /// 具体类,实现了抽象类中的特定步骤
        /// </summary>
        public class ConcreteClassB : AbstractClass
        {
            /// <summary>
            /// 与ConcreteClassA中的实现逻辑不同
            /// </summary>
            public override void PrimitiveOperation1()
            {
                Console.WriteLine("Implement operation 1 in Concreate class B.");
            }
    
            /// <summary>
            /// 与ConcreteClassA中的实现逻辑不同
            /// </summary>
            public override void PrimitiveOperation2()
            {
                Console.WriteLine("Implement operation 2 in Concreate class B.");
            }
        }
    class Program
        {
            static void Main(string[] args)
            {
                // 声明抽象类
                AbstractClass c;
    
                // 用ConcreteClassA实例化c
                c = new ConcreteClassA();
                c.TemplateMethod();
    
                // 用ConcreteClassB实例化c
                c = new ConcreteClassB();
                c.TemplateMethod();
    
                Console.Read();
            }
        }
    

      

  • 相关阅读:
    Javascript中最常用的55个经典技巧(转)
    Yahoo!网站性能最佳体验的34条黄金守则(转载)
    你误解了Windows的文件后缀名吗?
    你不知道的Spring配置文件
    Thrift 个人实战--Thrift 的序列化机制
    Thrift 个人实战--Thrift 网络服务模型
    Thrift 个人实战--初次体验Thrift
    HBase 实战(2)--时间序列检索和面检索的应用场景实战
    Kafka实战系列--Kafka API使用体验
    Kafka实战系列--Kafka的安装/配置
  • 原文地址:https://www.cnblogs.com/ice-baili/p/4710353.html
Copyright © 2011-2022 走看看