我是靠谱客的博主 长情蜻蜓,最近开发中收集的这篇文章主要介绍STRATEGY(策略)-对象行为模式,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.意图

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

2.适用性

  • 许多相关的类仅行为有异:提供了一种用多个行为中的一个来配置一个类的方法。
  • 需要使用一个算法的不同变体:这些变体实现为一个算法的类层次时。
  • 算法使用客户不该知道的数据:以避免暴露复杂的、与算法相关的数据结构。
  • 类中的操作以多个条件语句的形式出现:将相关的条件分支移入它们各自的Strategy类中以替换这些条件语句。

3.结构

这里写图片描述

4.实现

4.1 定义Strategy和Context接口

Strategy和Context接口必须使得ConcreteStrategy能够有效的访问它所需的Context中的任何数据,反之亦然。

  • 可以通过参数的形式将数据发送给Strategy
  • 让Context将自身作为一个参数传递给Strategy

4.2 将Strategy作为模板参数

在C++中可利用模板机制用一个Strategy来配置一个类,但必须满足:

  • 可以在编译时选择Strategy
  • 不需要在运行时改变

使用模板不在需要定义给Strategy定义接口的抽象类,把Strategy作为一个模板参数也使得可以将一个Strategy和它的Context静态绑定在一起,从而提高效率。

5.优缺点

5.1 优

  • 一个替代继承的方法:可以通过生成Context子类并赋予它不同的行为,但这会将行为硬编码到Context中,使得算法的实现与Context混合起来,使之难以理解难以维护难以扩展,而且不能动态改变算法
  • 消除一些条件语句

5.2 缺

  • 客户必须了解不同的Strategy
  • 增加了对象的数目

6.与状态模式的比较

  • 策略模式的环境类自己选择一个具体策略类,具体策略类无须关心环境类;
  • 而状态模式的环境类由于外在因素需要放进一个具体状态中,以便通过其方法实现状态的切换,因此环境类和状态类之间存在一种双向的关联关系。

最后

以上就是长情蜻蜓为你收集整理的STRATEGY(策略)-对象行为模式的全部内容,希望文章能够帮你解决STRATEGY(策略)-对象行为模式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部