重复=易错+难改

很多程序员都喜欢复制+粘贴

这样的后果是重复代码太多,一处有问题 处处需要改,代码大量冗余

使用模版方法,通过将不变行为迁移到父类(超类),去除子类重复代码来体现他的优势,模版方法提供了一个很好的代码复用平台

例:

using System;

namespace ConsoleApplication2
{
    /// <summary>
    /// 代码复用的父类/模版类
    /// </summary>
    public abstract class AbstractClass
    {
        //行为1
        public abstract int Operation1();

        //行为2
        public abstract int Operation2();

        /// <summary>
        /// 模版方法
        /// 此方法内的行为可能某些地方是通用的一样的  比如+1
        /// 某些地方可能是有变化的 如Operation1和Operation2可能执行不同的操作或返回不同的值
        /// </summary>
        /// <returns></returns>
        public int TempletedMethod()
        {
            //将子类可变的行为封装到抽象方法里
            int num = Operation1() + Operation2();
            
            //可以将+1看成是通用的操作
            return num +1;  //模版方法继续执行通用的操作 
        }
    }

    public class A : AbstractClass
    {
        //子类实现可能会有变化的行为1
        public override int Operation1()
        {
            return 1;
        }
        //子类实现可能会有变化的行为2
        public override int Operation2()
        {
            return 1;
        }
    }

    public class B : AbstractClass
    {
        //子类实现可能会有变化的行为1
        public override int Operation1()
        {
            return 2;
        }
        //子类实现可能会有变化的行为2
        public override int Operation2()
        { 
            return 2;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            AbstractClass a = new A();
            int Aresult = a.TempletedMethod();
            Console.WriteLine(Aresult);

            AbstractClass b = new B();
            int Bresult = b.TempletedMethod();
            Console.WriteLine(Bresult);
            Console.Read();

            //结果为3和5
        }
    }
}
原文地址:https://www.cnblogs.com/Scissors/p/2971661.html