策略模式是软件开发中较为常用的一种模式。简单的解释就是,对一组算法封装在同一个接口下,从而在使用的时候,不影响客户端的情况下,可以替换,实现不同功能。
实例:
Java中的TreeSet
public TreeSet(Comparator<? super E> comparator) {
this(new TreeMap<>(comparator));
}
组成
1.抽象策略角色这个是一个抽象的角色,通常情况下使用接口或者抽象类去实现。对比来说,就是我们的Comparator接口。
2.具体策略角色包装了具体的算法和行为。对比来说,就是实现了Comparator接口的实现一组实现类。
3.环境角色内部会持有一个抽象角色的引用,给客户端调用。对比来说,就是我们的TreeSet类。说明:TreeSet内部一定会有一个策略类的一个成员变量,这样做的目的在于可以当我们在去创建TreeSet对象的时候,可以接收我们向TreeSet类中传递的具体的策略类。
代码:
/**
* 策略角色
* @author Administrator
*
*/
public interface Strategy {
/**计算两个数,但是是和还是减还是乘还是除,或者其它,在具体实现类中才知道 */
public int cal(int a,int b);
}
//具体的策略,这里只写了一个计算和的策略
public class AddStrategy implements Strategy{
@Override
public int cal(int a, int b) {
return a+b;
}
}
//环境 里面有个构造方法,需要传递具体的策略
public class Environment {
private Strategy strategy;
public Environment(Strategy strategy) {
super();
this.strategy = strategy;
}
public int cal(int a,int b) {
return strategy.cal(a, b);
}
}
//测试代码
public class Test {
public static void main(String[] args) {
Environment en=new Environment(new AddStrategy());
int result=en.cal(2, 3);
System.out.println(result);//打印5
}
}
结论:
策略模式是很简单的一个模式,简单的说就是要基于抽象编程。