Template Method模式和Strategy模式[继承与委托]

继承

  • program by difference.

  • 通过继承,可以建立完整的软件结构分层.其中每一层都可以重用该层次以上的Code.

  • 过度使用继承的代价是巨大的.应使用组合或者委托来替代继承.

  • Template
    Method(使用继承)和Strategy(使用委托)模式解决了相同的问题:分离通用的算法和具体的上下文(DIP).

  • Template Method模式.

  • Strategy模式

    • Template Method模式允许一个通用算法操纵多个可能的具体实现.

    • 而完全遵循DIP的Strategy模式,允许每一个具体实现都可以被多个不同的通用算法操纵.

总结.两者都用来分离高层算法和底层的具体实现.都允许高层算法独立于它的具体实现细节.

Strategy模式也允许具体实现细节独立于高层算法的重用.

[Agile Software Development(Principles,Patterns,and Pracitices)]

时间: 2024-08-28 08:58:33

Template Method模式和Strategy模式[继承与委托]的相关文章

设计模式之(Template Method)模版方法模式

1. 需求: 设计一个水果榨汁机程序,该程序可以完成橘子.苹果等水果的榨汁,而且该水果榨汁机还可以完成水果削皮和去核. 2. 分析: 不同水果的榨汁流程是一样的,都是先把水果准备好,然后搅碎,然后再把汁液漏出.但是不同水果的准备过程不一样,橘子只需要剥皮,而苹果需要先削皮,然后去核.所以我们可以将不同水果的准备过程封隔离开来,将榨汁流程封装在一起. 3. 类图: 4. 总结: Template method模式类似于Strategy模式,都是用于封装固定的流程,将单一步骤的细小差异隔离.不同的是

Template Method(模板方法)模式

1.概述 在面向对象开发过程中,通常我们会遇到这样的一个问题:我们知道一个算法所需的关键步骤,并确定了这些步骤的执行顺序.但是某些步骤的具体实现是未知的,或者说某些步骤的实现与具体的环境相关.例子1:银行业务办理流程在银行办理业务时,一般都包含几个基本固定步骤:取号排队->办理具体业务->对银行工作人员进行评分.取号取号排队和对银行工作人员进行评分业务逻辑是一样的.但是办理具体业务是个不相同的,具体业务可能取款.存款或者转账. 2.问题 如何保证架构逻辑的正常执行,而不被子类破坏 ? 3.解决

Java策略模式(Strategy模式)

Strategy是属于设计模式中 对象行为型模式,主要是定义一系列的算法,把这些算法一个个封装成单独的类. Stratrgy应用比较广泛,比如,公司经营业务变化图,可能有两种实现方式,一个是线条曲线,一个是框图(bar),这是两种算法,可以使用Strategy实现. 这里以字符串替代为例,有一个文件,我们需要读取后,希望替代其中相应的变量,然后输出.关于替代其中变量的方法可能有多种方法,这取决于用户的要求,所以我们要准备几套变量字符替代方案. 首先,我们建立一个抽象类RepTempRule 定义

Behavioral模式之Strategy模式

1.意图 定义一系列的算法,把他们一个个封装起来,并使它们可相互替换.本模式使得算法可以独立与使用它的客户而变化. 2.别名 政策(Policy) 3.动机 有许多算法可对一个正文流进行分析.将这些算法硬编进使用它们的类中是不可取的.其原因如下: 需要换行功能的客户程序如果直接包含换行算法代码的话将会变得复杂,这使得客户程序庞大并且难以维护,尤其当其需要支持多种换行算法时问题更加严重. 不同的时候需要不同的算法,我们不想支持我们并不使用的换行算法. 当换行功能是客户程序的一个难以分割的成分时,增

模版方法(Template Method)——类行为型模式

模版方法模式的意图: 定义一个操作中的算法的骨架,TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤.即父类已经把算法的流程定义好了,子类只需要改变其中的某些步骤的实现. 就像我们要把东西放入冰箱中,需要的一套完整的流程即为: 打开冰箱,放入物品,关闭冰箱.其中打开和关闭都是固定的,而放入的物品则是不确定的,所以放入的物品需要我们在子类中来具体实现.实例化对象之后,去调用父类中的流程方法(TempleteMethod),就可以完成整个过程.这就是模版方法导

简单工厂模式与Strategy模式

参考资料:<大话设计模式> 简单工厂模式: /// ///简单工厂模式实验,2014.05.07---通过工厂类实例化对象 /// using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ds { class Program { static void Main(string[] args) { Operation oper = OperationFactor

java 策略模式 模板方法 (Template method) 示例

<pre name="code" class="cpp">package org.rui.pattern; import junit.framework.TestCase; /** * 分解共同性(Factoring Commonality ) * 应用"一次且只能有一次" 原则产生最基本的模式,将变化的那部分代码放到方 法里. 这可以用两种方法来表达: 策略模式(Strategy * ):运行时刻选择算法 另外,Strategy 模

策略模式(Strategy

Strategy 无论什么程序,其目的都是解决问题.而为了解决问题,我们又需要编写特定的算法.使用Strategy模式可以整体地替换算法的实现部分.能够整体地替换算法,能让我们轻松地以不同的算法去解决同一个问题,这种模式就是Strategy模式.(整体替换算法) 理清职责 |名字|说明 |Hand表示猜拳游戏中的"手势"的类 |strategy|表示猜拳游戏中的策略的类 |Winningstrategy |表示"如果这局猜拳获胜,那么下一局也出一样的手势"这一策略的

行为型设计模式之模板方法(TEMPLATE METHOD)模式 ,策略(Strategy )模式

1 模板方法(TEMPLATE METHOD)模式: 模板方法模式把我们不知道具体实现的步聚封装成抽象方法,提供一些按正确顺序调用它们的具体方法(这些具体方法统称为模板方法),这样构成一个抽象基类.子类通过继承这个抽象基类去实现各个步聚的抽象方法,而工作流程却由父类来控制. 2 模板方法应用于下列情况: 1) 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现. 2)各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复.首先识别现有代码中的不同之处,并且将不同之处分离为新