策略模式(Strategy )
为实现一个目的采用不同的方式都可实现,具体看要采取哪种方式。
//接口
public interface Strategy
{
public void algorithmInterface();
}
public class ConcreStrategyA implments Strategy
{
public void algorithmInterface()
{
System.out.println("策略A开始执行");
}
}
public class ConcreStrategyB implments Strategy
{
public void algorithmInterface()
{
System.out.println("策略B开始执行");
}
}
public class Context { private Strategy strategy; public Context(Strategy strategy){ this.strategy = strategy; } public int executeStrategy(){ return strategy.doOperation(); } }
客户端调用:
Context context = new Context(new ConcreStrategyA());
context.executeStrategy();
结果:策略A开始执行
Context context = new Context(new ConcreStrategyB());
context.executeStrategy();
结果:策略B开始执行
策略模式 VS. 简单工厂
策略模式是优化简单工厂得到的,在两种模式都适合时,那么理所应当的,策略模式要比简单工厂强。
但是,简单工厂的应用比较广泛。策略模式是封装变化的,也就是说在遇到“在不同时间应用不同业务”这样的变化的情况时,应用策略模式来封装这些变化,使得客户端耦合度降低,此种情况下会比简单工厂强。
从以上的两幅图中,大家也可以看出不同来,简单工厂是依赖,而策略模式是聚合。简单工厂依赖了所有子类,而父类聚合出了Context,显然,策略模式的耦合要明显降低
两者的区分:
策略模式和简单工厂模式看起来非常相似,都是通过多态来实现不同子类的选取,这种思想应该是从程序的整体来看得出的。如果从使用这两种模式的角度来看的话,我们会发现在简单工厂模式中我们只需要传递相应的条件就能得到想要的一个对象,然后通过这个对象实现算法的操作。而策略模式,使用时必须首先创建一个想使用的类对象,然后将该对象最为参数传递进去,通过该对象调用不同的算法。在简单工厂模式中实现了通过条件选取一个类去实例化对象,策略模式则将选取相应对象的工作交给模式的使用者,它本身不去做选取工作。
参考文章:https://blog.csdn.net/zhangmeihong2/article/details/42365097,
https://blog.csdn.net/fwj380891124/article/details/7552305