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

 

策略模式(Strategy)

 Strategy就是"策略"的意思, 指的是与敌军对垒时行军作战的方法。在编程中,我们可以将他理解为“算法”

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

通过接口将解决同一个问题的不同的算法封装起来,相互替换,从而可以应用于解决同一问题的不同的对象中。

正如下图所示:

Context:就相当于解决问题的对象,其中有Strategy接口的属性:可以更换实现了Strategy接口的类的实例,从而达到使用不同的算法。

Strategy:负责决定策略所必需的接口

ConcreteStrategy1、ConcreteStrategy2: 具体的策略,即不同的算法

为什么需要特意编写Strategy角色

    通常在编程时算法会被写在具体方法中。 Strategy模式却特意将算法与其他部分分离开来,只是定义了与算法相关的接口(API),然后再程序中以委托的方式来使用算法。使用委托这种弱关联关系可以很方便地整体替换算法。

相关设计模式

Flyweight模式

    有时会使用Flyweight模式让多个地方可以共用ConcreteStrategy角色

Abstract Factory模式

    使用Strategy模式可以整体地替换算法

    使用Abstract Factory模式则可以整体地替换具体工厂、零件和产品

State模式

    两个模式都可以替换被委托对象,而且他们的类之间的关系也很相似。但是两种模式的目的不同

    在Strategy模式中,ConcreteStrategy角色是表示算法的类。可以替换被委托对象的类,如果没有必要,也可以不替换

    在State模式中,ConcreteState角色是表示“状态”的类。每次状态变化时,被委托对象的类都必定会被替换。

 

百度百科:

借鉴博客: https://blog.csdn.net/u012124438/article/details/70039943/ 

借鉴书籍:《图解设计模式》 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值