策略模式:它定义了一系列的算法,并对其进行了封装,算法之间可以相互替换,这种替换对客户端是透明的。
作用: 解耦了客户端和具体算法,用StrategyContext封装了算法的构造,选择,执行,变换,使得客户端与算法完全解耦
StrategyContext类很像简单工厂里面的工厂类,根据条件判断应该返回什么实例,但是区别在于工厂类的职责只在构造对象并返回,
但StrategyContext不同,他可以封装其他逻辑,如它不仅仅返回算法对象,他应该调用算法对象直接返回客户端所需的结果,所以,
使用简单工厂模式,客户端必须使用一个所有算法的父类来引用工厂类返回的对象,这就造成了客户端不仅和工厂类耦合,还和算法的
父类耦合,而策略模式中,客户端给出数据,StrategyContext返回结果,与客户端耦合的类就只有StrategyContext了;
另外简单工厂模式只返回算法对象,客户端还必须自己调用算法对象的相应方法实现计算,而在策略模式中,计算全部转移到
StrategyContext类中,就减轻了客户端的职责
比较常见的是array.sort(comparator),其中array相当于Context,而传进来的comparator就是具体的排序算法。