策略模式(Strategy)——对象行为型模式

策略模式的意图:

定义一系列的算法,把它们一个个的封装起来,并且使它们可以互相替换。本模式使算法可以独立于使用它的客户而变化。

该模式具有以下特征:

1、完成一件事不止有一种可以选择的方法,或者虽然现在是唯一的,但预期会不断改进或需要“备胎”。

2、各方法视图解决的是同一件事。

3、每个方法是独立于其它方法的。

4、方法的取舍因时、因势、因人而异,临场处置时择优选择一个。

策略模式的结构图如下:

Strategy(策略):定义所有支持的算法的公共接口。Context使用这个接口来调用某个ConcreteStrategy定义的算法。

ConcreteStrategy(具体策略):以Strategy接口实现的某种具体算法。

Context(上下文):用一个ConcreteStrategy对象来配置。

维护一个对Strategy对象的引用。

可定义一个接口来让Strategy访问它的数据。

策略模式的Java代码实现:

测试代码如下:

策略模式的适用性:

1、许多相关的类仅仅是行为不同。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法。

2、需要使用一个算法的不同变体。

3、算法使用客户不应该知道的数据,可使用策略模式以避免暴露复杂的、与算法相关的数据结构。

4、一个类定义多个行为,并且这些行为在这个类的操作中以多个条件语句的形式出现。

策略模式的优缺点:

1、相关算法系列  Strategy类层次为Context定义了一系列的可供重用的算法或行为。

2、一个替代继承的方法  继承提供了另一种支持多种算法或行为的方法。可以直接生成一个Context类的子类,从而给它不同的行为。而将算法封装在独立的Strategy类中使得  
      你可以独立于其Context改变它,使它易于切换,易于理解,易于扩展。

3、实现的选择   Strategy模式可以提供相同的行为的不同的实现。

4、消除了一些条件语句   Strategy模式提供了用条件语句选择所需的行为以外的另一种选择。

5、客户必须了解不同的Strategy  本模式有一个潜在的缺点,就是一个客户要选择一个合适的Strategy就必须知道这些Strategy到底有何不同。

6、Strategy与Context之间的通信开销。

7、增加了对象的数目。

时间: 2024-11-05 17:11:16

策略模式(Strategy)——对象行为型模式的相关文章

生成器模式(Builder)-- 对象创建型模式

1. 动机 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.一个RTF(Rich Text Format)文档交换格式的阅读器应能将RTF转换为多种正文格式.该阅读器可以将RTF文档转换成普通ASCII文本或转换成一个能以交互方式编辑的正文窗口组件.但问题在于可能转换的数目是无限的.因此要能够很容易实现新的转换的增加,同时却不改变RTF阅读器.其实也就是,前面的数据接卸(源头处理)归解析,后续的显示处理,由显示处理的部分来完成.在数据解析和显示处理之间架设一个标准的桥梁

设计模式(4)-对象创建型模式-Prototype模式

1.对象创建型模式 1.4          Protoype模式 1.4.1需求 通过拷贝原形对象创建新的对象. 1.4.2结构 ?P r o t o t y p e(Gr a p h i c) - 声明一个克隆自身的接口. ?C o n c r e t e P r o t o t y p e(S t a ff.W h o l e N o t e.H a l fN o t e) - 实现一个克隆自身的操作. ?  C l i e n t(G r a p h i c To o l) - 让一个原

设计模式(3)-对象创建型模式-Abstract Factory模式

1.对象创建型模式 1.3           Abstract Factory模式 1.3.1 需求 在下面情况能够使用Abstract Factory模式: ?  一个系统要独立于它的产品的创建.组合和表示时(这个需求和FactoryMethod类似). ?  一个系统要由多个产品系列中的一个来配置时(这个需求也和Factory Method类似). ?  当你要强调一系列相关的产品对象的设计以便进行联合使用时(这个需求表明一个工厂要创建多个相关的产品对象,是比FactoryMethod多的

NET设计模式 第二部分 创建型模式(6):创建型模式专题总结(Creational Pattern)

创建型模式专题总结(Creational Pattern) ——.NET设计模式系列之七 Terrylee,2006年1月 概述 创建型模式,就是用来创建对象的模式,抽象了实例化的过程.它帮助一个系统独立于如何创建.组合和表示它的那些对象.本文对五种常用创建型模式进行了比较,通过一个游戏开发场景的例子来说该如何使用创建型模式. 为什么需要创建型模式 所有的创建型模式都有两个永恒的主旋律:第一,它们都将系统使用哪些具体类的信息封装起来:第二,它们隐藏了这些类的实例是如何被创建和组织的.外界对于这些

设计模式学习之模板方法模式(TemplateMethod,行为型模式)(9)

一.什么是模板方法模式 Template Method模式也叫模板方法模式,是行为模式之一,它把具有特定步骤算法中的某些必要的处理委让给抽象方法,通过子类继承对抽象方法的不同实现改变整个算法的行为. 二.模板方法模式的应用场景 Template Method模式一般应用在具有以下条件的应用中: - 具有统一的操作步骤或操作过程 - 具有不同的操作细节 - 存在多个具有同样操作步骤的应用场景,但某些具体的操作细节却各不相同 private static void Main(string[] arg

设计模式可复用面向对象软件设计基础之对象创建型模式—ABSTRACT FACTORY( 抽象工厂)

意图 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 适用性 在以下情况可以使用 Abstract Factory模式 ? 一个系统要独立于它的产品的创建.组合和表示时. ? 一个系统要由多个产品系列中的一个来配置时. ? 当你要强调一系列相关的产品对象的设计以便进行联合使用时. ? 当你提供一个产品类库,而只想显示它们的接口而不是实现时. 结构 模式结构图如下所示: Creator: 声明一个创建抽象产品对象的操作接口. ConcreteCreator:(Concrete

ANDROID 中设计模式的采用--创建型模式

 所谓模式就是在某一情景下解决某个问题的固定解决方案. 所有的创建型模式都是用作对象的创建或实例化的解决方案.         1 简单工厂模式 创建对象的最简单方法是使用new来创建一个对象,如果只创建一种固定不变的对象,可以使用new来创建这个对象. 如果要根据不同场景创建不同类型的对象,就可能需要采用不同的方法,就出现了不同的模式的采用和总结. 如ANDROID的媒体框架中为了实现对不同媒体源的播放,就需要实现多种播放器对象,并可能需要根据支持的媒体类型的增加,不断添加播放器对象. s

十四、原型模式Prototype(创建型模式)

1:原型模式的本质 原型模式的本质:克隆生成对象. 克隆是手段,目的还是生成新的对象实例.正是因为原型的目的是为了生成新的对象实例,原型模式通常是被归类为创建型的模式. 原型模式也可以用来解决"只知接口而不知实现的问题",使用原型模式,可以出现一种独特的"接口造接口"的景象,这在面向接口编程中很有用.同样的功能也可以考虑使用工厂来实现. 另外,原型模式的重心还是在创建新的对象实例,至于创建出来的对象,其属性的值是否一定要和原型对象属性的值完全一样,这个并没有强制规定

十三、工厂模式Factory(创建型模式)

一.引子 话说十年前,有一个暴发户,他家有三辆汽车--Benz奔驰.Bmw宝马.Audi奥迪,还雇了司机为他开车.不过,暴发户坐车时总是怪怪的:上Benz车后跟司机说"开奔驰车!",坐上Bmw后他说"开宝马车!",坐上Audi说"开奥迪车!".你一定说:这人有病!直接说开车不就行了?! 而当把这个暴发户的行为放到我们程序设计中来时,会发现这是一个普遍存在的现象.幸运的是,这种有病的现象在OO(面向对象)语言中可以避免了.下面就以Java语言为基础