工厂模式
1、作用
- 工厂模式将目的将创建对象的具体过程屏蔽隔离起来,从而达到更高的灵活性
2、定义
- 工厂模式关键在于,允许你将对象的创建过程与使用过程分开,提供了一种灵活和可扩展的方式来创建对象。
- 它适用于动态选择对象、复杂创建逻辑以及需要解耦的场景,使得代码更易于维护和扩展。
案例展示
public abstract class AbstractOperation {
private double _numberA=0;
private double _numberB=0;
public void init(double _numberA,double _numberB){
this._numberA=_numberA;
this._numberB=_numberB;
}
//每个子类需实现父类的计算方法
public abstract double compute();
public double get_numberA() {
return _numberA;
}
public double get_numberB() {
return _numberB;
}
}
定义一个抽象类用于接收其子类的实例对象,便于动态使用.(这里不推荐使用接口,因为接口不能又自己的变量,虽然也能实现,但是把变量写在父类中方便一点).
public class PrimaryFactory {
public static AbstractOperation createFactory(String operator) {
AbstractOperation oper = null;
switch (operator) {
case "+":
oper = new OperationAdd();
break;
case "-":
oper = new OperationSub();
break;
case "*":
oper = new OperationMul();
break;
case "/":
oper = new OperationDiv();
break;
default:
throw new RuntimeException("运算符输入错误");
}
return oper;
}
}
做一个简单的工厂,用于动态生产子类。每个子类实现各自的compute方法.
public class CounterMain {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("简单工厂模式实现的计算器:");
System.out.println("请输入计算的第一个数:");
double numA = scanner.nextDouble();
System.out.println("请输入你的运算符:");
String oper = scanner.next();
System.out.println("请输入计算的第二个数:");
double numB = scanner.nextDouble();
AbstractOperation factory = PrimaryFactory.createFactory(oper);
factory.init(numA,numB);
System.out.println("计算结果等于:"+factory.compute());
}
}
客户端调用.
这简单的完成了一个计算器的运算。