设计模式之旅—策略模式

编程入门 行业动态 更新时间:2024-10-07 15:19:20

设计<a href=https://www.elefans.com/category/jswz/34/1771241.html style=模式之旅—策略模式"/>

设计模式之旅—策略模式

策略模式分析思路介绍:

  • 策略模式的介绍
  • 策略模式的实战
  • 策略模式的总结

一、策略模式的介绍

  • 概念: 一个类的行为或其算法可以在运行时更改。即该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。
  • 主要解决: 在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护的情况。
  • 案例场景描述: 在《设计模式之旅—适配器模式》中分析到小明和小黄来到了泰国游玩手机充电适配器的问题,小明和小黄吃了点儿东西稍微休息了一下起来发现手机充电已完成,两人便商量着出去玩的计划(第一站:曼谷看人妖表演!!!),然后小明就地图了一下自己离曼谷也不是很远,可是怎样过去喃!!!骑单车?做当地三轮车?自驾???纠结了半天那就让我们一块儿来看看小明她们是怎样选择出行方式的。。。

二、策略模式的实战

1、策略模式工作原理

1)原理图和实例图的展示


2)图片展示的介绍

  • 抽象策略(Strategy)类:定义了一个公用接口,各种不同的算法以不同的方式实现这个接口,环境类角色使用这个接口调用不同的算法,一般使用接口或抽象类实现
  • 具体策略(Concrete Strategy)类:实现了抽象策略定义的接口,提供具体的算法实现
  • 环境(Context)类:持有一个策略类的引用,最终给客户端调用
2、结合案例场景分析

1)出行方式(抽象策略类)的定义

2)骑单车(具体策略类)的实现

3)坐三轮(具体策略类)的实现

4)自驾车(具体策略类)的实现

5)出行工具(环境类)的定义

6)Test类的定义

7)执行结果

三、策略模式的总结

1、策略模式使用的优缺点
<【优点】>
  • 算法可以自由切换
  • 避免使用多重条件判断(上面选择出行方式的时候,往往会使用if-else语句,也就是用户不选择A那么就选择B这种情况,这样耦合性太高了,而且代码臃肿!策略模式可以避免这种情况)
  • 扩展性良好策略模式遵循开闭原则,实现代码的解耦合。对新方法扩展也比较方便,只需要继承相关策略接口就行)
  • 策略模式可以提供相同行为的不同实现,客户端可以根据不同的时间或空间要求和选择不同
  • 策略模式把算法的使用放到环境类Context中,而算法的实现迁移到具体的策略类中,实现了两者的分离
  • 提供一系列的可供重用的算法族,恰当使用继承可以把算法族的公共代码抽取到父类中,避免重复代码
<【缺点】>
  • 策略类会增多(策略模式会出现很多策略类)
  • 所有策略类都需要对外暴露(客户端必须要知道所有的策略类,并自行决定要使用哪种策略类)
  • 环境类Context在使用这些策略类的时候,这些策略类由于继承了策略接口,所以有些数据可能用不到,但也初始化了
2、适用场景
  • 一个系统需要动态地在几种算法中选择一种,可将每个算法封装到策略类中
  • 一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现
  • 如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为
  • 系统中各种算法彼此完全独立,且要求对客户端隐藏具体算法的实现细节时可以使用策略模式来隐藏与算法相关的数据结构
  • 多个类只区别在表现行为上的不同,可以使用策略模式,在运行时动态选择具体要执行的行为
3、策略模式使用注意事项
  • 策略模式的关键是:分析项目中变化部分与不变部分
  • 核心思想:多用组合或聚合少用继承,用行为类组合,而不是行为的继承
  • 体现了"对修改关闭,对扩展开放"的原则,客户端增加行为不用修改原有代码,只要添加一种策略或行为即可,避免了if-else的多重使用
  • 提供了可以替换继承关系的方式,策略模式将算法封装在独立的Strategy类中使得你可以独立于其环境类Context来改变它,这样更易于切换、理解和扩展
  • 每添加一个策略就要增加一个类,当策略过多是会导致类的数目很庞大
4、策略模式与工厂模式的区别
  • 工厂模式是创建型模式,而策略模式是对象行为型模式
  • 工厂模式是关注对象创建,提供创建对象的接口,让对象的创建与具体的使用客户无关
  • 策略模式是关注行为和算法的封装
  • 举个栗子:我们出去旅游,对于策略模式我们只需要选择其中一种出行方法就好,但工厂模式不同,工厂模式是你决定哪种旅行方案后,由工厂代替你去构建具体方案,比如工厂代替你去买火车票
5、具体相关应用实例
  • JDK的Arrays中的Comparator就是使用了策略模式,从而实现相关数据做比较
  • Java AWT 中的 LayoutManager的使用

更多推荐

设计模式之旅—策略模式

本文发布于:2024-02-06 03:59:36,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1746418.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:模式   之旅   策略

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!