C#设计模式之行为类模式:模板方法模式

定义(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>
    /// 组装DELL电脑
    /// </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】
模板方法模式在抽象类中定义了算法的实现步骤,将这些步骤的实现延迟到具体子类中去实现,从而使所有子类复用了父类的代码,所以模板方法模式是基于继承的一种实现代码复用的技术。

应用场景

当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。

当构造过程必须允许被构造的对象有不同的表示时。

				
时间: 2024-10-09 07:33:37

C#设计模式之行为类模式:模板方法模式的相关文章

设计模式之第3章-模板方法模式(Java实现)

设计模式之第3章-模板方法模式(Java实现) "那个,上次由于我老婆要给我做饭,所以就没有说完就走掉了...这个那个".这次和以前一样,先来开场福利(工厂方法模式已被作者踹下场).由美女抽象工厂介绍一下适用场景~大家欢迎 抽象工厂之应用场景 一个系统要独立于它的产品的创建.组合和表示时. 一个系统要由多个产品系列中的一个来配置时. 当你要强调一系列相关的产品对象的设计以便进行联合使用时. 当你提供一个产品类库,而只想显示它们的接口而不是实现时. “人家要讲的就这么多了,接下来还是让今

设计模式(八)之模板方法模式

模板方法模式的定义:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤. 当对一个项目进行重构的时候,往往都会把相似的代码进行优化,将其中共同的部分抽取出来,放进一个基类中,这样一说是不是又觉得像一种编程习惯呢.下面用简单.通俗的例子来说明吧. 做Android项目的时候,经常要对访问服务端数据,为了比较好说这个设计模式,我就用android-async-http-1.4.4.jar的开源框架来请求后台,用过这个框架的

java设计模式(9):模板方法模式(TemplateMethod)

一,定义:模板方法模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 二,类图: 三,通过小例子讲解: 这个模式一般用在程序的步骤比较多,而且有固定的模式,固定的步骤,而每一步的实现又有多种情况,这是我们可以使用TemplateMethod模式.这样可以保证算法骨架的正确性,又将多态运用的非常好. 这里举个人一天要做的事情吧,假如一个人一天要有起床,吃饭,做事情,睡觉四个事项. 1,首先我们看模板类: [java] 

设计模式(十八)---模板方法模式

1.简介 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑. 不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现.这就是模板方法模式的用意. 2.模板方法结构 模板方法模式是所有模式中最为常见的几个模式之一,是基于继承的代码复用的基本技术. 代表这些具体逻辑步骤的方法称做基本方法(primitive method):而将这些基本方法汇总起来的方法叫做模板方法(template metho

&quot;围观&quot;设计模式(18)--行为型之模板方法模式(TemplateMethod Pattern)

模板方法模式定义了一个算法的步骤,并允许子类别为一个或多个步骤提供其实践方式.让子类别在不改变算法架构的情况下,重新定义算法中的某些步骤.----WIKIPEDIA 个人理解 模板方法模式相对而言比较简单,一般的都是由抽象类定义好模板方法,然后,子类通过继承并实现其父类中定义好的模板中需要执行的具体的方法,调用子类对象的模板方法时,会执行该类中的具体实现的方法.这个模式我个人的感觉有点像是面向过程的操作,执行完一道工序,接着下一道工序. 案例解析 模板方法相对来说比较简单,这里只列举一个例子供大

设计模式@第16章:模板方法模式

第16章:模板方法模式 一.豆浆制作问题 编写制作豆浆的程序,说明如下: 制作豆浆的流程 选材--->添加配料--->浸泡--->放到豆浆机打碎 通过添加不同的配料,可以制作出不同口味的豆浆 选材.浸泡和放到豆浆机打碎这几个步骤对于制作每种口味的豆浆都是一样的 请使用 模板方法模式 完成 (说明:因为模板方法模式,比较简单,很容易就想到这个方案,因此就直接使用, 不再使用传统的方案来引出模板方法模式 ) 二.模板方法模式基本介绍 基本介绍 模板方法模式(Template Method P

设计模式(4):模板方法模式

模板方法模式: 定义: 定义一个操作中的算法框架,而将一些步骤延迟到子类中. 使得子类能够不改变一个算法的结构就可以重定义该算法的某些特定步骤. 模板方法模式很easy,只使用了Java的继承机制,但它是一个应用很广泛的模式. 在软件开发project中,假设同样一段代码复制过两次,就须要对设计产生怀疑.架构师要明白地说明为什么同样的逻辑要出现两次或很多其它次. 模板方法模式的长处: 封装不变.扩展可变部分 提取公共部分代码.便于维护 行为有父类控制,子类实现. 缺点: 子类对父类产生了影响.

设计模式笔记(十)------ 模板方法模式

在实际工作中,有时需要编写很多重复性的代码,这样的代码不易维护更容易出错.在小型项目中,有个模式非常适用此类情况. 模板方法模式:定义一个操作中的算法的骨架,而将步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤. 类图如下: 由此看出,是不是非常简单.类图中只有两个角色: 1.抽象类(AbstractClass):实现了模板方法,定义了算法的骨架.2.具体类(ConcreteClass):实现抽象类中的抽象方法,已完成完整的算法. 模版方法模式的结构 模版方

设计模式(十):模板方法模式

一.概述 模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤. 二.结构类图 三.解决问题 模板方法就是提供一个算法框架,框架里面的步骤有些是父类已经定好的,有些需要子类自己实现.相当于要去办一件事情,行动的流程已经定好了,但有些步骤需要自己去做,而有些步骤可能别人帮我们做了.就拿建网站来说,一般的程序是购买域名-->购买空间-->上传网站-->备案-->审核,每个网站的创建必须经过这样的固定

设计模式解密(4)- 模板方法模式

1.简介 定义:一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重定义该算法中的某些特定步骤. 模板方法模式,一般是为了统一子类的算法实现步骤,所使用的一种手段或者说是方式.它在父类中定义一系列算法的步骤,而将具体的实现都推迟到子类. 最典型的形式就是一个接口,一个抽象父类,父类中会有一系列的抽象方法,而在子类中去实现这些方法. 类型:行为类模式 2.实例引入 背景:学校老师布置作业,老师布置作业,学生写作业,老师检查作业 定义一个抽象作业类 package co