一、程序中的策略
就是对各个算法的一个封装「不是实现算法,而是封装算法」,让客户端非常容易的调用,省掉了客户端 if else 恶心的判断,让客户端独立于各个策略;使用一个策略模式,定义一个抽像策略,然后把各个请求策略封装,客户想使用哪个就使用哪个,非常灵活和方便。策略模式和简单工厂很相似,确有不同,策略是一种行为模式,而简单工厂是创建型模式「创建对象」。
二、策略模式的定义
策略是对算法的封装,是一种形为模式,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。
三、策略的特点
是一种行为模式,对算法封装,使得客户端独立于各个策略
扩展性强,添加策略无非就是添加一个具体的实现类而已,代价非常低。
四、策略模式的结构
Strategy :抽象的策略, 是一个接口或抽象类。
ConcreteStrategy: 具体的策略类,实现了抽象的策略。
Context :一个普通的类, 上下文环境,持有 Stragegy 的引用。
五、策略模式和简单工厂模式的区分
策略模式和简单工厂非常相似,结构基本上一样,但是它们侧重点不一样。
策略模式:是一个行为模式,解决策略的切换和扩展,让策略独立于客户端。
简单工厂模式:是一种创建模式「创建对象」,接收指令创建出具体的对象,让对象的创建和具体的使用客户无关。
但是我们在策略模式中可以使用简单工厂模式,【把生成策略这一过程使用工厂去实现,这样好不好呢?适合就是最好的】
六、策略模式的优缺点
既然策略模式使用这么广泛,那么策略模式是不是就是无敌了呢,没有一点点缺点?肯定不是的。
优点:
1、结构清晰,把策略分离成一个个单独的类「替换了传统的 if else」
2、代码耦合度降低,安全性提高「各个策略的细节被屏蔽」
缺点:
1、客户端必须要知道所有的策略类,否则你不知道该使用那个策略,所以策略模式适用于提前知道所有策略的情况下
2、增加了类的编写,本来只需要 if else 即可「但是这是所有模式和架构的通病呀」
策略模式
最新推荐文章于 2024-02-10 07:30:00 发布