美文网首页设计模式 C#设计模式架构设计与重构
固定模板,不同算法,就用『模板方法模式』

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

作者: 圣杰 | 来源:发表于2016-11-28 21:35 被阅读203次

    目录:设计模式之小试牛刀
    源码路径: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】
    模板方法模式在抽象类中定义了算法的实现步骤,将这些步骤的实现延迟到具体子类中去实现,从而使所有子类复用了父类的代码,所以模板方法模式是基于继承的一种实现代码复用的技术。

    应用场景

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

    相关文章

      网友评论

      • 圣杰:该模式主张将一个可复用的工作流程或者由多个步骤组成的算法定义成模板方法,组成这个流程或者算法的步骤实现在相应的虚方法之中,模板方法根据按照预先编排的流程去调用这些虚方法。所有这些方法均定义在同一个类中,我们可以通过派生该类并重写相应的虚方法达到对流程定制的目的。

        转自--蒋金楠博客

      本文标题:固定模板,不同算法,就用『模板方法模式』

      本文链接:https://www.haomeiwen.com/subject/xmzopttx.html