策略模式在集合类的Comparator中大量应用
策略模式也强调了一个设计原则:多使用组合,少用继承。
策略模式就是使用变量来强调“多使用组合”
下面定义一个使用策略模式来实现加减乘除
package com.test.strategy;
/**
* 抽象策略角色
*
*/
public interface Strategy {
public int calculate(int a,int b);
}
上面定义了一个抽象策略角色,其中定义了一个caculate方法 。
package com.test.strategy;
/**
* 具体策略角色
*
*/
public class AddStrategy implements Strategy {
public int calculate(int a, int b) {
return a + b;
}
}
package com.test.strategy;
/**
* 具体策略角色
*/
public class SubtractStrategy implements Strategy {
public int calculate(int a, int b) {
return a - b;
}
}
package com.test.strategy;
/**
* 具体策略角色
*/
public class MultiplyStrategy implements Strategy {
public int calculate(int a, int b) {
return a * b;
}
}
package com.test.strategy;
/**
* 具体策略角色
*/
public class DivideStrategy implements Strategy {
public int calculate(int a, int b) {
return a / b;
}
}
上面定义了四个具体策略解决,实现了抽象策略角色接口,并实现了相应的方法,用来做加减乘除。
package com.test.strategy;
//环境角色
public class Enviroment {
private Strategy strategy;
public Enviroment(Strategy strategy) {
this.strategy = strategy;
}
public Strategy getStrategy() {
return strategy;
}
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
public int caculate(int a,int b){
return strategy.calculate(a, b);
}
}
环境类用来维护及调用策略类。
package com.test.strategy;
public class Client {
public static void main(String[] args) {
//加法
AddStrategy addStrategy = new AddStrategy();
Enviroment enviroment = new Enviroment(addStrategy);
System.out.println(enviroment.caculate(3, 4));
//减法
SubtractStrategy subtractStrategy = new SubtractStrategy();
enviroment = new Enviroment(subtractStrategy);
System.out.println(enviroment.caculate(3, 4));
//乘法
MultiplyStrategy multiplyStrategy = new MultiplyStrategy();
enviroment = new Enviroment(multiplyStrategy);
System.out.println(enviroment.caculate(3, 4));
//除法
DivideStrategy divideStrategy = new DivideStrategy();
enviroment = new Enviroment(divideStrategy);
System.out.println(enviroment.caculate(3, 4));
}
}
具体的客户端调用。
再看一个例子: