zoukankan      html  css  js  c++  java
  • 重复=易错+难改

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

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

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

    例:

    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
            }
        }
    }
  • 相关阅读:
    20171012
    BZOJ[2563] 阿狸和桃子的游戏
    BZOJ[1028] [JSOI2007]麻将
    BZOJ[1972] [Sdoi2010]猪国杀
    BZOJ[1033] [ZJOI2008] 杀蚂蚁antbuster
    P5651 基础最短路练习题
    P3047 [USACO12FEB]Nearby Cows G
    P6190 魔法
    P2391 白雪皑皑 / BZOJ 2054 疯狂的馒头
    CSP 2020 J/S 初赛游记
  • 原文地址:https://www.cnblogs.com/Scissors/p/2971661.html
Copyright © 2011-2022 走看看