策略模式
概述
- 目的:让算法和对象分开来,使得算法可以独立于使用它的客户而变化
- 示例:
/**
* 定义算法接口
*/
public interface CalculateInterface {
/**
* 两个数进行运算
* @param a
* @param b
* @return
*/
public int calc(int a , int b);
}
/**
* 算法实现:减法
*/
public class SubStractCalculate implements CalculateInterface {
@Override
public int calc(int a, int b) {
return a - b ;
}
}
/**
* 算法实现:加法
*/
public class AddCalculate implements CalculateInterface {
@Override
public int calc(int a, int b) {
return a + b;
}
}
/**
* 应用对象
*/
public class Calculator {
private int a ;
private int b ;
private CalculateInterface calculate ;
public Calculator(){
}
public Calculator(int a , int b){
this.a = a ;
this.b = b ;
}
public Calculator(int a , int b,CalculateInterface calculate){
this(a,b);
this.calculate = calculate ;
}
public int calc(int a , int b){
return a + b ;
}
public int getResult(){
if(null != calculate){
return calculate.calc(a, b);
}
return calc(a, b);
}
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public int getB() {
return b;
}
public void setB(int b) {
this.b = b;
}
}
/**
* 测试类
*/
public class CalculateMain {
/**
* 策略模式:
* 只需关注接口,并且将接口用到的入参传递进去即可,并不关心到底具体是要如何进行业务封装
* @param args
*/
public static void main(String[] args) {
int a = 10 ;
int b = 5 ;
Calculator calculator = new Calculator(a, b, new SubStractCalculate());
System.out.println(calculator.getResult());
Calculator calculator1 = new Calculator(a,b,new CalculateInterface() {
@Override
public int calc(int a, int b) {
return a * b + b;
}
});
System.out.println(calculator1.getResult());
}
}
参考资料