文章来源:学习笔记
方法工厂模式,例子是一个可扩展的运算器,通过实现Operation接口重写方法,可扩展出想要的运算方法,缺点每多一个运算规则就要创建一个类。
/**
* @Description 一个运算工厂,获取运算的实体
* @Version 1.0.0
* @Date 2022/9/17 15:46
* @Author NiKaBoy
* @Email 123456789@qq.com
*/
public class OperationFactory {
/**
* @Description: 加法运算实体
* @Data:[]
* @return: com.nika.boy.factory.Operation
* @Author: NiKaBoy
* @Email: 123456789@qq.com
* @Date: 22-09-260 16:11:57
*/
public Operation addOperation(){
return new AddOperation();
}
/**
* @Description: 减法运算实体
* @Data:[]
* @return: com.nika.boy.factory.Operation
* @Author: NiKaBoy
* @Email: 123456789@qq.com
* @Date: 22-09-260 16:12:40
*/
public Operation subOperation(){
return new SubOperation();
}
}
/**
* @Description 运算接口
* @Version 1.0.0
* @Date 2022/9/17 15:47
* @Author NiKaBoy
* @Email 123456789@qq.com
*/
public interface Operation {
/**
* @Description: 运算方法
* @Data:[param]
* @return: double
* @Author: NiKaBoy
* @Email: 123456789@qq.com
* @Date: 22-09-260 15:53:04
*/
double calculate(double ... param);
}
/**
* @Description 加法运算
* @Version 1.0.0
* @Date 2022/9/17 15:55
* @Author NiKaBoy
* @Email 123456789@qq.com
*/
public class AddOperation implements Operation{
@Override
public double calculate(double... param) {
if(param == null){
return 0;
}
return Arrays.stream(param).reduce(0, Double::sum);
}
}
/**
* @Description 减法运算
* @Version 1.0.0
* @Date 2022/9/17 16:00
* @Author NiKaBoy
* @Email 123456789@qq.com
*/
public class SubOperation implements Operation {
@Override
public double calculate(double... param) {
if (param == null) {
return 0;
}
// if (param.length == 1) {
// return param[0];
// }
// double sum = param[0];
// for (int i = 1; i < param.length; i++) {
// sum -= param[i];
// }
return Arrays.stream(param).reduce((pre, next) -> pre - next).getAsDouble();
}
}
/**
* @Description TODO
* @Version 1.0.0
* @Date 2022/9/17 16:13
* @Author NiKaBoy
* @Email 123456789@qq.com
*/
public class OperationMain {
public static void main(String[] args) {
OperationFactory operationFactory = new OperationFactory();
Operation addOperation = operationFactory.addOperation();
double calculate = addOperation.calculate(2, 4, 5);
System.out.println("result add:" + calculate);// 11.0
Operation subOperation = operationFactory.subOperation();
double result = subOperation.calculate(2,4,3);
System.out.println("result sub:" + result); // -5.0
}
}