11,策略模式

一:初始策略模式
包括:定义,结构,参考实现
二:体会策略模式
包括:场景问题,不用模式解决方案,使用模式解决方案
三:理解策略模式
包括:认识策略模式,Context和Strategy的关系,容错恢复机制,策略模式与模板方法模式,策略模式的优缺点。
四:思考策略模式
包括:策略模式的本质,对设计原则的体现,何时选用

1,定义
定义一系列算法,把他们包装起来,并且使他们可以互相替换,本模式可以使得算法独立使用它的客户而变化

2,结构和说明
在这里插入图片描述
context:上下文,负责和具体的策略类交互,通常上下文会持有一个真正的策略实现,上下文还可以让具体的策略类来获取上下文的数据,甚至让具体的实现策略类来回调上下文的方法
Stategy:策略接口,用来约束一系列具体的策略算法,context使用这个接口来调用具体的策略实现定义的算法
ConcreteStategy:具体的策略实现。

3,策略模式的功能
具体算法的实现,从具体的业务处理里面独立出来,实现成为单独的算法类,从而形成一系列算法,并让这些算法相互替换
策略的重心并不是如何实现算法,而是如何组织和调用的算法

4,策略模式与if-else
每个策略算法具体的实现的功能就是原来的if-else的具体的实现。多个if-else就可以使用策略模式

5,算法的平等性
各个策略算法的平等性,,所有的策略算法相互独立,没有依赖,算法直接可以相互替换。
策略算法是相同行为的不同的实现,

6,谁来选择具体的策略算法
两个地方
1)客户端来选择具体的实现策略
2),客户端不管,由上下文来选择具体的策略实现

7,策略实现方式
策略都是使用接口来定义,到那时如果多个算法具有公共功能,可以把Strategy实现成为抽象类,多个算法公共功能实现到策略中

8,运行时策略的唯一性
运行期间策略模式每一个时刻只能使用一个具体的策略实现对象

9,context和Strategy的关系
在策略模式中,通常时上下文实现具体的策略对象,反过来,策略对象也可以从上下文获取所需要的数据,在这种情况下,具体的策略对象通过回调上下文的方法获取这些数据,上下文可以充当多个策略算法实现的公共接口,
缺点:可能会造成传入上下文的数据浪费,因为可能有的算法会使用这些数据,有的不会,但是上下文和策略对象的交互是存在的

10,容错恢复机制
程序运行的时候吗,正常情况下按照某种方式进行,如果按照某种方式发生错误的时候,系统不会崩溃,也不会不能向下运行,而是有容错的能力,也就是恢复机制,来替代正常的执行功能,
比如日志管理系统,通常存在数据库中,如果暂时连接不上数据库,就先记录到文件中,在合适的时候,把文件的记录再转录到数据库中,这就是两种记录日志的策略,在运行期间自动转换

11,策略模式与模板方法模式
在实际策略模式中,经常会出现一系列算法的实现上存在共功能的功能,甚至这一系列算法的实现步骤都是一样的,只是在某些步骤有所不同,这个时候就需要对策略模式进行变化了
三种实现方式
1)在上下文中实现公共功能,让所有的具体实现策略回调这些方法。
2)把策略改成抽象类,然后再里面实现具体算法的公共功能
3)给所有的策略算法定义一个抽象的父类,让这个父类去实现策略的接口,然后在这个父类去实现公共的功能,更进一步,在这个具体类里面实现定义算法实现的骨架,然后让具体的策略算法去实现变化的部分,这样一个结构就自然百年城策略模式结合模板方法模式,那个抽象类就成了模板方法的模板类
在这里插入图片描述
12,策略模式优缺点
1)定义一系列算法
2)避免多重条件语句
3)更好的扩张性
4)客户必须了解每种策略的不同
5)增加对象数据
6)只适合扁平的算法结构

13,策略模式本质
分离算法,选择实现

14,设计原则的体现
设计原则体现了开闭原则,里氏替换原则,

15,何时选用
1)出现许多相关的类,仅仅是行为有差别的情况,
2)出现同一个算法,有很多不同的实现的情况,
3)需要封装算法中,与算法相关的数据的情况,可以使用策略模式来避免暴露这些跟算法相关的数据结构
4)出现抽象定义了很多行为的类,并且通过if-else语句来选择这些行为的情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大道至简@EveryDay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值