zoukankan      html  css  js  c++  java
  • C# 设计模式-模板方法模式

    一.介绍  

      模板方法模式(Template Pattern)。属于行为型模式。它定义一个操作中算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

    二.实现

      一说到模板,就能想到这是个现有的,可以直接套用的东西。举个例子,我们去开车,不管开什么车,步骤都差不多,上车、插钥匙、踩油门,这就可以定义为一个模板,我们跟着这个模板去运作就好。这种情况下,可以用模板方法模式去处理。

    //抽象模板角色
    public abstract class Car
    {
        public virtual void DriveCar()
        {
            Method1();
            Method2();
            Method3();
        }
    
        public abstract void Method1();
        public void Method2() {
            Console.WriteLine("插钥匙");
        }
        public void Method3()
        {
            Console.WriteLine("踩油门");
        }
    
    }
    
    //具体模板角色
    public class Truck : Car
    {
        public override void Method1()
        {
            Console.WriteLine("进入货车");
        }
    }
    
    //具体模板角色
    public class Bus : Car
    {
        public override void Method1()
        {
            Console.WriteLine("进入巴士");
        }
    }
    
    //调用
    public static void Main(string[] args)
    {
        Car t1 = new Truck();
        t1.DriveCar();
        var t2 = new Bus();
        t2.DriveCar();
    }

      在上面实现中,具体子类重写了其中的方法,不难理解,因为模板也不能完全套用,具体实现时需要不同的操作。

    三.总结

      优点:

      1.实现了代码复用。

      2.能够灵活地应对子步骤的变化,符合开闭原则。

      缺点:

      1.因为引入了一个抽象类,如果具体实现过多的话,需要用户花更多时间去理清类之间的关系。

  • 相关阅读:
    PTA 7-5 有趣的最近公共祖先问题 (30分)
    平衡二叉树的旋转类型及代码实现
    Ubuntu搭建青岛大学开源OJ
    见过猪跑现在开始吃猪肉了
    工作4年的老腊肉的总结
    服务器日志的目录
    Jacoco配置的问题
    一次述职之后的反省
    Python+Webdriver+Phantomjs,设置不同的User-Agent,获得的url不一致
    Eclipse+Pydev 找不到对应的module not in Pythonpath
  • 原文地址:https://www.cnblogs.com/shadoll/p/14329204.html
Copyright © 2011-2022 走看看