设计模式学习笔记(十八)——Strategy策略模式

原创 2007年09月18日 18:29:00
设计模式学习笔记(十八)——Strategy策略模式

       这段时间在项目中接触到了Strategy策略模式,所以就学习了一下,做一个总结。

       Strategy策略模式是一种对象行为模式。主要是应对:在软件构建过程中,某些对象使用的算法可能多种多样,经常发生变化。如果在对象内部实现这些算法,将会使对象变得异常复杂,甚至会造成性能上的负担。

       GoF《设计模式》中说道:定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换。该模式使得算法可独立于它们的客户变化。

       Strategy模式的结构图如下:


 


      
从图中我们不难看出:Strategy模式实际上就是将算法一一封装起来,如图上的ConcreteStrategyAConcreteStrategyBConcreteStrategyC,但是它们都继承于一个接口,这样在Context调用时就可以以多态的方式来实现对于不用算法的调用。

       Strategy模式的实现如下:

       我们现在来看一个场景:我在下班在回家的路上,可以有这几种选择,走路、骑车、坐车。首先,我们需要把算法抽象出来:

       public interface IStrategy

    {

        void OnTheWay();

}

接下来,我们需要实现走路、骑车和坐车几种方式。

public class WalkStrategy : IStrategy

    {

        public void OnTheWay()

        {

            Console.WriteLine("Walk on the road");

        }

    }

 

    public class RideBickStragtegy : IStrategy

    {

        public void OnTheWay()

        {

            Console.WriteLine("Ride the bicycle on the road");

        }

    }

 

    public class CarStragtegy : IStrategy

    {

        public void OnTheWay()

        {

            Console.WriteLine("Drive the car on the road");

        }

}

 

最后再用客户端代码调用封装的算法接口,实现一个走路回家的场景:

class Program

    {

        static void Main(string[] args)

        {

            Console.WriteLine("Arrive to home");

            IStrategy strategy = new WalkStrategy();

            strategy.OnTheWay();

            Console.Read();

        }

}

运行结果如下;

Arrive to home

Walk on the road

如果我们需要实现其他的方法,只需要在Context改变一下IStrategy所示例化的对象就可以。

 

       Strategy模式的要点:

1Strategy及其子类为组件提供了一系列可重用的算法,从而可以使得类型在运行时方便地根据需要在各个算法之间进行切换。所谓封装算法,支持算法的变化。

2Strategy模式提供了用条件判断语句以外的另一中选择,消除条件判断语句,就是在解耦合。含有许多条件判断语句的代码通常都需要Strategy模式。

3Strategy模式已算法为中心,可以和Factory Method联合使用,在工厂中使用配制文件对变化的点进行动态的配置。这样就使变化放到了运行时。

4、与Template Method相比,Strategy模式的中心跟集中在方法的封装上

 
 

浅谈JAVA设计模式之——策略模式(Strategy)

一、概述 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。 二、适用性 1.许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为...
  • l1028386804
  • l1028386804
  • 2015年05月09日 14:02
  • 1819

我所理解的设计模式(C++实现)——策略模式(Strategy Pattern)

每个人都要“交个人所得税”,但是“在美国交个人所得税”和“在中国交个人所得税”就有不同的算税方法。 而策略模式就是对算法进行包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通...
  • LCL_data
  • LCL_data
  • 2013年08月24日 10:59
  • 12657

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

Strategy模式是一种行为型设计模式,它将算法一个个封装起来,在某一时刻能够互换地使用其中的一个算法。从概念上看,所有这些算法完成的都是相同的工作,只是实现不同而已。动机在开发中,我们常常会遇到概...
  • lihao21
  • lihao21
  • 2015年08月26日 19:51
  • 2017

设计模式学习笔记(四):策略模式【Strategy】

刘备要到江东娶老婆了,走之前诸葛亮给赵云
  • yegucheng2618
  • yegucheng2618
  • 2014年06月18日 09:17
  • 263

设计模式 学习笔记 之 策略模式 Strategy(4)

先说说题外话。公司的代码就像老而陈旧的破船,更新迭代过程中上面打满的补丁,并且还捕捞了一只巨大的鲸鱼。 每当在想去重新改建一下,让这艘船更加健壮,就会有新的需求过来,让原本已经破败的小船更加不堪。周...
  • Agou_66
  • Agou_66
  • 2017年11月30日 15:09
  • 63

设计模式C++学习笔记之一(Strategy策略模式)

设计模式C++学习笔记之一(Strategy策略模式) 无意中,从网上下到一本电子书《24种设计模式介绍与6大设计原则》,很好奇这里有24种设计模式,印象中GOF写的《设计模式》(Desig...
  • liucanrui
  • liucanrui
  • 2012年04月05日 22:25
  • 399

设计模式C++学习笔记之一(Strategy策略模式)

设计模式C++学习笔记之一(Strategy策略模式) 无意中,从网上下到一本电子书《24种设计模式介绍与6大设计原则》,很好奇这里有24种设计模式,印象中GOF写的《设计模式》(Design ...
  • miaoshaohoa
  • miaoshaohoa
  • 2013年07月29日 09:59
  • 334

设计模式C++学习笔记之一(Strategy策略模式)

博文很精彩,为方便个人学习特转载,地址:http://www.cnblogs.com/wanggary/archive/2011/04/07/2008796.html 无意中,从网上下到一本电子...
  • phiall
  • phiall
  • 2016年03月17日 22:23
  • 260

设计模式学习笔记--策略模式(Strategy Pattern)

设计模式第一弹,发现在继续深入学习Java相关知识前,很有必要学习下设计模式,其中几个比较重要的设计模式其实在之前的使用中已经出现过很多次,但是由于没有学过设计模式,也就知其然不知其所以然的拿来用了,...
  • TTCCAAA
  • TTCCAAA
  • 2015年06月11日 18:17
  • 908

设计模式C++学习笔记之十(Strategy策略模式)

无意中,从网上下到一本电子书《24种设计模式介绍与6大设计原则》,很好奇这里有24种设计模式,印象中GOF写的《设计模式》(Design Patterns),好像只有23种吧。运行起来一看,还真挺吸引...
  • a854073071
  • a854073071
  • 2016年05月02日 17:51
  • 426
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式学习笔记(十八)——Strategy策略模式
举报原因:
原因补充:

(最多只允许输入30个字)