zoukankan      html  css  js  c++  java
  • 设计模式之九(模版方法模式)

    前言

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

    结构图

    代码实现

     AbstractClass是抽象类,其实也就是一抽象类,定义并实现了一个模版方法,这个模版方法一般是一个具体方法,它给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。顶级逻辑也有可能调用一些具体方法。

        public abstract class AbstractClass
        {
            public abstract void PrimitiveOperation1();
    
            public abstract void PrimitiveOperation2();
    
            public void TemplateMethod()
            {
                PrimitiveOperation1();
                PrimitiveOperation2();
                Console.WriteLine("");
            }
        }

    ConcreteClassA,实现父类所定义的一个或多个抽象方法。每一个AbstractClass都可以有任意多个ConcreteClass与之对应,而每一个ConcreteClass都可以给出这些抽象方法(也就是顶级逻辑的组成步骤)的不同实现,从而使得顶级逻辑的实现各不相同。

        public class ConCreteClassA : AbstractClass
        {
            public override void PrimitiveOperation1()
            {
                Console.WriteLine("具体类A方法1实现");
            }
    
            public override void PrimitiveOperation2()
            {
                Console.WriteLine("具体类A方法2实现");
            }
        }
    
        public class ConCreteClassB: AbstractClass
        {
            public override void PrimitiveOperation1()
            {
                Console.WriteLine("具体类B方法1实现");
            }
    
            public override void PrimitiveOperation2()
            {
                Console.WriteLine("具体类B方法2实现");
            }
        }
    

    客户端调用

        class Program
        {
            static void Main(string[] args)
            {
                AbstractClass Test;
                Test = new ConCreteClassA();
                Test.TemplateMethod();
    
                Test = new ConCreteClassB();
                Test.TemplateMethod();
    
                Console.ReadLine();
            }
        }
    

     运行结果如下

    总结

     当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。我们通过模版方法模式把这些行为搬移到单一的地方,这些帮助子类摆脱重复的不变行为的纠缠。

  • 相关阅读:
    强大的js时间选择器 万年历
    js 锚点平滑定位
    php str_replace的替换漏洞
    绝对路径 相对路径 小结
    昨天去了长城
    [转载]71个做饭技巧好好记住了,不要忘记给自己做一顿美餐噢
    最近心情很糟,情绪很低落
    用javascript实现html页面之间的参数传递的四种方法
    解决ajax缓存问题
    [转载]30岁前男人需要完成的事
  • 原文地址:https://www.cnblogs.com/aehyok/p/3313645.html
Copyright © 2011-2022 走看看