`
jiagou
  • 浏览: 2589027 次
文章分类
社区版块
存档分类
最新评论

【设计模式系列】行为型模式之Strategy模式

 
阅读更多
概要
开发中,经常会碰到一些基本逻辑相同,个别算法或处理行为不同的情况,这时如果把所有处理都耦合在一起,会增加模块的复杂度,同时给扩展带来一定难度。一种比较好的方法就是使用Strategy模式来对处理进行解耦,提高扩展性。同时Strategy模式还可以更好的支持"运行时"行为或算法的切换。

目的
对类行为进行解耦,使算法可以相对独立的变化而不至于对Client产生过多的影响。
(每次写概要和目的都比较痛苦,因为这些内容相对比较抽象,自己的文字功底不够,有时要把自己的想法用抽象的文字真正说明清楚还是挺累的)

实例
看这样一个例子吧。设计一个绘图程序,会用到多个第三方绘图方法,首先我们需要能用它来绘制矩形,程序员或许会给出这样的方案:


简单说明下上面的代码吧。由于每种绘图库的画线处理不同,所以子类DrawLib1和DrawLib2分别实现了画线函数DrawLine的处理,而在基类Draw中的DrawSqure方法则会利用多态性,基于对象类型使用相应库的DrawLine方法,来绘制矩形。
也许初看来还是个不错的解决方案,但是让我们简单分析一下吧。对于直线型图形的绘制,肯定会有很多不同的需求,比如画三角形,比如波浪线等等,要实现这些需求我们又势必会对类Draw大动干戈,而每种DrawLib都是依赖于类Draw,所以你的每次改动都跟DrawLib1,DrawLib2耦合在一起了,这是我们不希望看到的。现在可以看出,原来我们把库相关的算法本身和处理逻辑耦合在一起了,那么如果用Strategy模式会怎么解决这个问题呢?


我们把绘图类库相关的算法处理独立出来,而把绘制矩形这些逻辑处理放到类DrawContext里来处理,这样,即使再追加其他逻辑处理也不会影响到类Draw,DrawLib1,DrawLib2。而且我们还可以为DrawContext增加动态切换绘图库的功能,如下所示SetDrawer方法:

对用户而言,可以很方便的去切换当前使用的绘图库,也就是运行时行为,而不需要去切换绘图对象本身。

另外当对DrawSqure方法又提出不同需求时,还可以考虑从DrawContext继承来实现不同的需求的DrawSquare,同时又不会对类库基本算法本身带来任何影响。

应用
Strategy模式跟Bridge模式类结构很相似,但是Bridge模式是针对结构而言,而Strategy模式则是对模块或类行为而言的模式,视角不同。





分享到:
评论

相关推荐

    (行为型模式) Strategy 策略模式

    C#面向对象设计模式 (行为型模式) Strategy 策略模式 视频讲座下载

    人人都懂设计模式 人人都懂设计模式

    设计模式可以分为三大类:创建型模式、结构型模式和行为型模式。 在本书中,作者罗伟富通过 Python 实现了 23 种经典设计模式,包括 Singleton 模式、Factory 模式、Observer 模式等。这些模式可以帮助开发者更好地...

    c++设计模式-行为型模式-策略模式

    c++设计模式-行为型模式-策略模式;qt工程;c++简单源码; 策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于...

    设计模式_行为模式

    行为模式是设计模式的一个重要分支,主要关注对象之间的交互和责任分配。这类模式涉及到系统的行为和控制流程,帮助开发者更好地理解和控制软件的行为。在这个“设计模式_行为模式”主题中,我们将深入探讨几种关键...

    C#面向对象设计模式纵横谈(23):(行为型模式) Strategy 策略模式

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在C#中,策略模式经常被用来解决复杂的问题,特别是在需要动态切换算法或行为的场景下。它通过将算法封装到具有独立接口的类中,使得算法可以互相替换...

    设计模式之蝉

    除了创建型模式,内容中还提到了“策略模式”(Strategy pattern),属于行为型设计模式。它定义了算法族,分别封装起来,使它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。在内容中提到的“我可以...

    JAVA设计模式之行为模式

    这是JAVA设计模式中属于行为模式的部分,包括Template(模板模式)、Chain of Responsibility(责任链模式)、Memento(纪念品模式)、Mediator(中介模式)、Strategy(策略模式)、State 、Observer(观察者模式)、Visitor...

    走进设计模式之 策略模式(Strategy)

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在软件设计中,有时我们需要根据不同的场景或条件选择不同的算法或行为。策略模式允许我们将这些算法封装成独立的类,每个类代表一种策略,然后在运行...

    软件设计模式—行为型模式

    软件设计模式,行为型模式:ChainOf Responsibility Command Interpreter Iterator Mediator Memento Observer State Strategy Template method Visitor

    24种设计模式以及混合设计模式

    首先,设计模式分为三大类:创建型、结构型和行为型。创建型设计模式关注对象的创建过程,如单例模式(Singleton)、工厂模式(Factory)、抽象工厂模式(Abstract Factory)和建造者模式(Builder)。这些模式提供...

    C#面向对象设计模式纵横谈\23 行为型模式Strategy策略模式.zip

    在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不需要... 这是第23节:行为型模式Strategy策略模式

    JAVA设计模式chm文档

    创建模式: 设计模式之Factory 设计模式之Prototype(原型) 设计模式之Builder 设计模式之Singleton(单态) ...设计模式之Strategy(策略) 设计模式之Mediator(中介者) 设计模式之Interpreter(解释器) 设计模式之Visitor

    [行为模式] head first 设计模式之策略模式(strategy)

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在软件开发中,我们经常遇到需要根据不同的条件或时间点执行不同算法的情况。策略模式允许我们将这些算法封装成独立的类,使得它们可以互换,从而提高...

    L14-设计模式-行为型模式v21

    行为型模式(Behavioral Patterns)是设计模式的一种,关注对象行为功能上的抽象,从而提升对象在行为功能上的可拓展性,能以最少的代码变动完成功能的增减。 在设计模式中,行为型模式主要包括以下几种: 1. 迭代...

    设计模式之美—学习笔记

    在这个“设计模式之美”的学习笔记中,我们将探讨一些主要的设计模式,以及它们在实际开发中的应用。 首先,我们从创建型模式开始。这类模式主要用于对象的创建,如单例模式(Singleton)、工厂模式(Factory ...

    C#面向对象设计模式纵横谈(视频与源码)

    讲 师:李建忠 上海祝成信息科技... C#面向对象设计模式纵横谈(23):(行为型模式) Strategy 策略模式 C#面向对象设计模式纵横谈(24):(行为型模式) Visitor 访问者模式 C#面向对象设计模式纵横谈(25):设计模式总结

    Java设计模式菜鸟系列教程

    策略模式是一种行为型设计模式,允许在运行时选择不同的算法来执行相同的任务。它可以让算法独立于客户端代码,提高代码的可维护性和可扩展性。在Java中,策略模式可以应用于排序算法、加密算法、 compression算法等...

    Java设计模式之禅

    《Java设计模式之禅》是一本深入浅出讲解设计模式的书籍,书中不仅包含23种经典设计模式的案例,还详细介绍了设计模式背后的思想和原则,适合初学者以及对设计模式有一定了解的程序员阅读。本书旨在帮助读者理解如何...

    设计模式之Strategy模式和代码实现

    Strategy模式是一种设计模式,主要目的是为了在运行时动态地改变对象的行为。在本文中,我们将通过一个奇幻角色扮演游戏(RPG)的例子来解释这个模式,以便更好地理解其工作原理。 在RPG游戏中,我们有四种角色:...

Global site tag (gtag.js) - Google Analytics