优点:
简单工厂模式主要解决类的创建时候的耦合问题.
策略模式定义了算法家族并分别封装起来,让他们之间可以互相替换.而算法的改变,不会影响算法的使用者.
Demo:实现一个简单的三十六计计策类
public abstract class Strategy {
public abstract void work ();
public class FightStrategy extends Strategy {
@Override
public void work () {
Log.d("meee" ,getClass()+":\n" +"三十六计 之 破釜沉舟" );
}
}
public class RunStrategy extends Strategy {
@Override
public void work () {
Log.d("meee" ,getClass()+":\n上计" );
`
}
public class StrategyContext {
Strategy mStrategy;
public StrategyContext (Strategy strategy) {
mStrategy = strategy;
}
public void setStrategy (Strategy strategy){
mStrategy = strategy;
}
public void work (){
mStrategy.work();
}
}
持有军师这个对象,只调用StrategyContext.work ()即可,不需要关心怎么实现的
使用场景
几乎可以封装任何类型,只要在分析过程中听到需要在不同的时间应用不同的业务规则,就可以考虑使用策略模式来处理这种变化的可能性
策略模式和简单工厂模式的结合使用
在基本的策略模式中,选择所用的具体实现的职责还是有调用者来实现.那么,如果指挥官很菜怎么办?就不能由军师自己选择计策吗?
Demo
public class StrategyContextWithSimpleFactory {
Strategy mStrategy;
public StrategyContextWithSimpleFactory (String status) {
setStrategy(status);
}
public void setStrategy (String status){
switch (status){
case "敌方大军压境!" :
mStrategy=new RunStrategy();
break ;
case "我军逃无可逃了!" :
mStrategy=new FightStrategy();
break ;
}
}
public void dealwith (){
mStrategy.work();
}
}