• 设计模式(17)---模板方法模式


    一、定义

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

    解释:简单来说,需要定义一个通用的基类,但是基类中不同的操作,于是模板方法模式将不同的操作编写成一个抽象函数放到子类中实现,这样即可完成通用基类的目的。

    二、UML类图及基本代码

     

    基本代码:

    abstract class AbstractClass
        {
            public abstract void PrimitiveOperation1();
            public abstract void PrimitiveOperation2();
    
            public void TemplateMethod()
            {
                PrimitiveOperation1();
                PrimitiveOperation2();
                Console.WriteLine("基类的行为");
            }
        }
    
        class ConcreteClassA : AbstractClass
        {
            public override void PrimitiveOperation1()
            {
                Console.WriteLine("具体类A方法1的实现");
            }
    
            public override void PrimitiveOperation2()
            {
                Console.WriteLine("具体类A方法2的实现");
            }
        }
    
        class ConcreteClassB : AbstractClass
        {
            public override void PrimitiveOperation1()
            {
                Console.WriteLine("具体类B方法1的实现");
            }
    
            public override void PrimitiveOperation2()
            {
                Console.WriteLine("具体类B方法2的实现");
            }
        }

    客户端调用及结果:

    AbstractClass ac;
                ac = new ConcreteClassA();
                ac.TemplateMethod();
    
                Console.WriteLine("");
                ac = new ConcreteClassB();
                ac.TemplateMethod();
    View Code

    三、实例说明

    日常生活中做菜这件事,虽然做不同的菜的方式不一样,但绝大多数步骤是一样的,本例用炒菠菜和炒白菜作为实例进行说明模板方法模式,基本代码如下:

    public abstract class Vegetable
        {
            public void CookVegetable()
            {
                Console.WriteLine("烧蔬菜的一般方法:");
                this.PoilOil();
                this.HeatOil();
                PourVegetable();
            }
    
            public void PoilOil()
            {
                Console.WriteLine("倒油");
            }
    
            public void HeatOil()
            {
                Console.WriteLine("把油烧热");
            }
    
            public abstract void PourVegetable();
        }
    
        public class Spinach : Vegetable
        {
            public override void PourVegetable()
            {
                Console.WriteLine("菠菜倒进锅中");
            }
        }
    
        public class Cabbage : Vegetable
        {
            public override void PourVegetable()
            {
                Console.WriteLine("白菜倒进锅中");
            }
        }
    View Code

    客户端调用及运行结果:

    Vegetable sp = new Spinach();
                sp.CookVegetable();

    四、优缺点及适用场景

    优点:

    1)实现了代码复用

    2)能够灵活应对子类步骤的变化,符合开放-封闭原则

    即:封装不变部分,扩展可变部分。 2、提取公共代码,便于维护。 3、行为由父类控制,子类实现。

    缺点:

    引入了一个抽象类,使系统逻辑更加复杂。

    适用场景:

    模板方法模式通过把不变的行为搬移到超类,去除子类中的重复代码来体现其优势。因此凡是能体现此优点的地方都可以使用模板方法模式。

  • 相关阅读:
    20174309徐宁艺 Exp7 网络欺诈防范
    20174309徐宁艺 Exp6 MSF基础应用
    20174309徐宁艺 Exp5 信息搜集与漏洞扫描
    20174309徐宁艺 Exp4 恶意代码分析
    20174309徐宁艺 Exp3 免杀原理与实践
    20174309徐宁艺 Exp2 后门原理与实践
    20174309徐宁艺 Exp1 PC平台逆向破解
    Kali Linux安装
    福大软工 · 最终作业
    福大软工 · 第十二次作业
  • 原文地址:https://www.cnblogs.com/ysyn/p/4153767.html
Copyright © 2020-2023  润新知