策略模式
策略模式是一种定义一系列算法的方法
* 当一些算法完毕的都是同样的工作,仅仅是实现不同,就能够用同样的方式调用全部的算法。
* 策略模式能够减少算法的使用类与算法类之间的耦合。
封装变化点是面向对象的一种非常重要的思维方式。而策略模式就是封装了一系列概念上同样而实现不同的算法的变化之处。
所需的类:
- Strategy 策略类(一系列算法类的抽象父类)
- ConcreteStarategyA 详细算法类(继承自Strategy类)
- Context 上下文类(策略对象在此类中生成)
策略模式的Strategy类为Context定义了一系列可供重用的算法或行为,使用继承能够提取出算法类的公共功能。另外,因为每个算法类都是单独存在的,所以策略模式能够简化单元測试。
在此处我们将简单工厂模式和策略模式相结合,从而使得策略对象在Context类得以生成。
代码实现:
Strategy类
/**
* 抽象算法类
*/
public abstract class Strategy {
//算法方法
public abstract void AlgorithmInterface();
}
Context类
public class Context {
Strategy strategy;
public Context(String type){
switch (type) {
case "A":
strategy = new ConcreteStarategyA();
break;
case "B":
strategy = new ConcreteStarategyB();
break;
default:
break;
}
}
//上下文接口
public void contextInterface(){
strategy.AlgorithmInterface();//依据详细的算法对象,调用事实上现方法
}
}
详细的算法类
public class ConcreteStarategyA extends Strategy{
@Override
public void AlgorithmInterface() {
// TODO Auto-generated method stub
//算法A的详细实现
}
}
public class Application {
public static void main(String args[]){
//能够看出client仅仅须要认识Context一个类就能够了。
//相比于简单工厂模式这样的(策略模式与简单工厂模式相结合)能够减少耦合度。
Context context = new Context("B");
context.contextInterface();
}
}