策略模式

来源:互联网 发布:单片机应用系统设计 编辑:程序博客网 时间:2024/05/29 06:58

策略模式:它定义了一系列的算法,并对其进行了封装,算法之间可以相互替换,这种替换对客户端是透明的。

作用: 解耦了客户端和具体算法,用StrategyContext封装了算法的构造,选择,执行,变换,使得客户端与算法完全解耦

 

StrategyContext类很像简单工厂里面的工厂类,根据条件判断应该返回什么实例,但是区别在于工厂类的职责只在构造对象并返回,

但StrategyContext不同,他可以封装其他逻辑,如它不仅仅返回算法对象,他应该调用算法对象直接返回客户端所需的结果,所以,

使用简单工厂模式,客户端必须使用一个所有算法的父类来引用工厂类返回的对象,这就造成了客户端不仅和工厂类耦合,还和算法的

父类耦合,而策略模式中,客户端给出数据,StrategyContext返回结果,与客户端耦合的类就只有StrategyContext了;

另外简单工厂模式只返回算法对象,客户端还必须自己调用算法对象的相应方法实现计算,而在策略模式中,计算全部转移到

StrategyContext类中,就减轻了客户端的职责

 

比较常见的是array.sort(comparator),其中array相当于Context,而传进来的comparator就是具体的排序算法。