固定模板,不同算法,就用『模板方法模式』

目录:设计模式之小试牛刀
源码路径:Github-Design Pattern


定义(Template Method)

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

类图

模板方法模式

启示

组装电脑一般包含三个部分,主机、显示器、输入设备(键鼠),而不同品牌电脑的组装都各不相同,但是最终组装成一部完整的电脑的步骤都是固定一样的。定义抽象类,暴露主机、显示器、输入设备(键鼠)的组装给具体厂商去实现,提供一个公共的最终组装方法。

代码

/// <summary>
    /// 组装电脑
    /// </summary>
    public abstract class AssembleComputer
    {
        /// <summary>
        /// 组装主机
        /// </summary>
        public abstract void BuildMainFramePart();

        /// <summary>
        /// 组装显示器
        /// </summary>
        public abstract void BuildScreenPart();

        /// <summary>
        /// 组装输入设备(键鼠)
        /// </summary>
        public abstract void BuildInputPart();

        /// <summary>
        /// 组装起来
        /// </summary>
        public void Assemble()
        {
            BuildMainFramePart();
            BuildScreenPart();
            BuildInputPart();
        }

    }

    /// <summary>
    /// 组装HP电脑
    /// </summary>
    public class AssembleHpComputer : AssembleComputer
    {
        public override void BuildMainFramePart()
        {
            Console.WriteLine("组装HP电脑的主板");
        }

        public override void BuildScreenPart()
        {
            Console.WriteLine("组装HP电脑的显示器");
        }

        public override void BuildInputPart()
        {
            Console.WriteLine("组装HP电脑的键盘鼠标");
        }
    }

    /// <summary>
    /// 组装HP电脑
    /// </summary>
    public class AssembleDellComputer : AssembleComputer
    {
        public override void BuildMainFramePart()
        {
            Console.WriteLine("组装Dell电脑的主板");
        }

        public override void BuildScreenPart()
        {
            Console.WriteLine("组装Dell电脑的显示器");
        }

        public override void BuildInputPart()
        {
            Console.WriteLine("组装Dell电脑的键盘鼠标");
        }
    }

优缺点

实现了代码复用,符合【OCP】
模板方法模式在抽象类中定义了算法的实现步骤,将这些步骤的实现延迟到具体子类中去实现,从而使所有子类复用了父类的代码,所以模板方法模式是基于继承的一种实现代码复用的技术。

应用场景

当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。当构造过程必须允许被构造的对象有不同的表示时。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,539评论 25 709
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,268评论 30 472
  • 设计模式基本原则 开放-封闭原则(OCP),是说软件实体(类、模块、函数等等)应该可以拓展,但是不可修改。开-闭原...
    西山薄凉阅读 3,963评论 3 14
  • BaHUHUH阅读 271评论 0 0
  • 晚上跟老师上夜班 要查看今日新住院的病人们 查到最后一个 一老妇人坐在床上 抱着个今天溺水进院的小朋友 背后还有躺...
    阿敏姑娘阅读 153评论 0 0