面向对象的编程,并不是越多类越好,类的划分是为了封装,但分类的基础是抽象,具有相同特性和功能的对象的抽象集合才是类。
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
—抽象策略角色: 策略类,通常由一个接口或者抽象类实现。
—具体策略角色:包装了相关的算法和行为。
—环境角色:持有一个策略类的引用,最终给客户端调用。
/**
* @Description 抽象算法类,定义所有支持的算法的公共接口
*/
public abstract class Strategy {
//算法方法
public abstract void algorithmInterface();
}
/**
* @Description 具体算法A
*/
public class ConcreteStrategyA extends Strategy {
//算法A实现
@Override
public void algorithmInterface() {
System.out.println("算法A实现");
}
}
/**
* @Description 具体算法B
*/
public class ConcreteStrategyB extends Strategy {
//算法B实现
@Override
public void algorithmInterface() {
System.out.println("算法B实现");
}
}
/**
* @Description 具体算法C
*/
public class ConcreteStrategyC extends Strategy {
//算法C实现
@Override
public void algorithmInterface() {
System.out.println("算法C实现");
}
}
/**
* @Description 上下文 Context 用一个ConcreteStrategy来配置,维护一个对Strategy对象的引用
*/
public class Context {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public void contextInterface(){
strategy.algorithmInterface();
}
}
public class Main {
//客户端代码
public static void main(String[] args) {
Context context = null;
context = new Context(new ConcreteStrategyA());
context.contextInterface();
context = new Context(new ConcreteStrategyB());
context.contextInterface();
context = new Context(new ConcreteStrategyC());
context.contextInterface();
}
}