理解设计模式(策略)

  策略模式: 环境驱使程序选择策略,策略决定程序行为。

特定环境

  • 一个系统需要动态地在几种算法中选择一种
  • 算法要对使用者透明时
  • 一个类含多个逻辑流程,而实际执行时,只选择其中一种

一类问题

需要将同一流程下的多个分支逻辑,封装为对象

解决方案

策略模式,有3个角色:

  • : 环境类 Context, 封装策略接口引用,执行时指定采用策略,具体类实现
  • :策略接口 Strategy, 策略行为规范,一般由抽象类或接口实现
  • : 具体策略接口 ConcreteStrategy, 实现策略接口,由具体子类实现

优缺

优点:

  • 避免继承,但复用原有代码
    因为,通过继承原有类代码,扩展或修改原有逻辑,也可实现不同环境下,进入不同的逻辑流
  • 避免程序使用多重条件转移语句,使系统易于扩展
  • 避免算法和环境类的耦合

缺点:
具体策略类过多时,增加系统维护负担,此时要考虑优化

参考

设计模式随笔系列:鸭子-策略模式(Strategy)[原], 作者: fejustin

设计模式 ( 十八 ) 策略模式Strategy(对象行为型), 作者: 真实的归宿

时间: 2024-11-08 19:18:26

理解设计模式(策略)的相关文章

Asp.net设计模式笔记之一:理解设计模式

GOF设计模式著作中的23种设计模式可以分成三组:创建型(Creational),结构型(Structural),行为型(Behavioral).下面来做详细的剖析. 创建型 创建型模式处理对象构造和引用.他们将对象实例的实例化责任从客户代码中抽象出来,从而让代码保持松散耦合,将创建复杂对象的责任放在一个地方,这遵循了单一责任原则和分离关注点原则. 下面是“创建型”分组中的模式: 1.Abstract Factory(抽象工厂)模式:提供一个接口来创建一组相关的对象. 2.Factory Met

mongodb设计模式策略之读书笔记

mongodb的设计模式策略 读书笔记 1.查询命令分类模式 在副本集中职责被分离到不同的节点.最基本的第一类节点可能也同时占据着首要地位,它只需要储存那些写入和更新所需的数据.而查询工作则交由第二类节点来执行.这一模式将提升首要节点服务器的写吞吐量,因为当写入一组对象时,需要更新及插入的数据量也随之减少,除此之外,二类节点也得益于较少的待更新数据和其自身所具有的为其工作量而优化的内存工作集. 也就是读写分离,主节点写,备节点做查询. 2.应用程序式事务模式 使用queue 样例 db.queu

2.大话设计模式-策略模式

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace DesignModel 8 { 9 /// <summary> 10 /// 策略模式 11 /// </summary> 12 public class TacticsModel 13 { 14 //对于

换种思路去理解设计模式(下)

开写之前,先把前两部分的链接贴上.要看此篇,不许按顺序看完前两部分,因为这本来就是一篇文章,只不过内容较多,分开写的. 换种思路去理解设计模式(上) 换种思路去理解设计模式(中) 8       对象行为与操作对象 8.1     过程描述 所谓对象行为和操作对象,需要三方面内容: l  操作过程: 一般表现为一个方法.该方法接收一个对象或者组合类型的参数,然后对这个对象或者组合进行操作,例如修改属性.状态或者结构等. l  操作的对象或组合: 会作为实参传入操作过程,会被操作过程修改属性.状态

head first 设计模式 策略模式

HEAD FIRST:策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 设计模式:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换.本模式使得算法可独立于它的客户而变化. 大话设计模式:它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户. 使用这个模式的原因: 用许多的算法对一类进行计算.那么如果把这些算法强行编码到这个类当中.其实是不可取的.因为很多时候下不同的情况下使用不同的算

【C#设计模式-策略者模式】

一.策略者模式定义: 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化. 二. 策略者模式的组成: 抽象策略角色: 策略类,通常由一个接口或者抽象类实现. 具体策略角色:包装了相关的算法和行为. 环境角色:持有一个策略类的引用,最终给客户端调用. 三.策略者模式的实现: 在现实生活中,针对员工的收入情况,会收取个人所得税,公司所得税等等,针对这些所得税都有对于的算法进行计算,如果不采用策略模式,可能会建一个计算类,里面包含着

深入理解设计模式---系列目录

一.创建型模式 深入理解设计模式(一):单例模式(Singleton pattern): 确保一个类只有一个实例, 并提供全局访问点. 深入理解设计模式(二):简单工厂模式(factory method pattern): 实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例. 深入理解设计模式(四):工厂方法模式(factory method pattern): 定义了一个创建对象的接口, 但由子类决定要实例化的类是哪一个. 工厂方法让类把实例

设计模式 - 策略模式(Strategy Pattern) 具体解释

策略模式(Strategy Pattern) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26577879 本文版权全部, 禁止转载, 如有须要, 请站内联系. 策略模式: 定义了算法族, 分别封装起来, 让它们之间能够相互替换, 此模式让算法的变化独立于使用算法的客户. 对于父类的子类族须要常常扩展新的功能, 为了使用父类比較灵活的加入子类, 把父类的行为写成接口(interface)的形式; 使用set()方法

设计模式 - 策略模式(Strategy Pattern) 详解

策略模式(Strategy Pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26577879 本文版权所有, 禁止转载, 如有需要, 请站内联系. 策略模式: 定义了算法族, 分别封装起来, 让它们之间可以相互替换, 此模式让算法的变化独立于使用算法的客户. 对于父类的子类族需要经常扩展新的功能, 为了使用父类比较灵活的添加子类, 把父类的行为写成接口(interface)的形式; 使用set()方法,

设计模式---策略模式Strategy(对象行为型)

1. 概述 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化. 策略模式是对算法的封装,它把算法的责任和算法本身分割开,委派给不同的对象管理. 2. 应用场景 (1)多个类只区别在表现行为不同,在运行时动态选择具体要执行的行为. (2)需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现. (3)对客户隐藏具体策略(算法)的实现细节,彼此完全独立. 3. 示例 出行旅游:我们可以有几个策略可以考虑:可