一、策略模式概述
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
策略模式的结构
封装类:也叫上下文,对策略进行二次封装,目的是避免高层模块对策略的直接调用。
抽象策略:通常情况下为一个接口,当各个实现类中存在着重复的逻辑时,则使用抽象类来封装这部分公共的代码,此时,策略模式看上去更像是模版方法模式。
具体策略:具体策略角色通常由一组封装了算法的类来担任,这些类之间可以根据需要自由替换。
策略模式是一种行为型模式。
二、策略模式代码示例
已排序算法为例,先定义一个策略接口
public interface Strategy {
public void sort();
}
再定义两个具体算法实现上述接口
public class BubbleSort implements Strategy {
@Override
public void sort() {
System.out.println("冒泡排序");
}
}
public class QuickSort implements Strategy {
@Override
public void sort() {
System.out.println("快速排序");
}
}
定义封装类
public class Context {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public void sort() {
strategy.sort();
}
}
客户端调用
public class Client {
public static void main(String[] args) {
Context bubble = new Context(new BubbleSort());
System.out.println("执行冒泡排序");
bubble.sort();
System.out.println("--------------");
Context quick = new Context(new QuickSort());
System.out.println("执行快速排序");
quick.sort();
System.out.println("--------------");
}
}
执行结果
执行冒泡排序
冒泡排序
--------------
执行快速排序
快速排序
--------------