简单工厂模式(Simple Factory Pattern),在工厂类中对象决定创建出哪一种产品类的实例。这些产品类都实现了相同的接口,或者继承了相同的父类。
结构图
- Factory(工厂角色):它是核心,负责实现创建所有实例的内部逻辑。在工厂类中,提供了一个静态方法,可以直接被外界直接调用,以创建具体产品对象。
- Product(抽象产品角色):具体产品对象的父类或者接口,具体产品对象都是其子类对象。
- ConcreteProduct(具体产品类):它是创建目标,所有创建的对象都充当这个角色的某个具体类的实例。
简单工厂代码
抽象产品角色
public abstract class Operation {/*** 获取两个数运算后的值** @param numA 第一个数* @param numB 第二个数* @return 结果*/public abstract double getResult(double numA, double numB);
}
具体产品类,包括加法、减法、乘法、除法四个运算的具体实现
public class Add extends Operation {@Overridepublic double getResult(double numA, double numB) {return numA + numB;}
}
public class Sub extends Operation {@Overridepublic double getResult(double numA, double numB) {return numA - numB;}
}
public class Mul extends Operation {@Overridepublic double getResult(double numA, double numB) {return numA * numB;}
}
public class Div extends Operation {@Overridepublic double getResult(double numA, double numB) {if (numB == 0) {System.out.println("除数不能为0");}return numA / numB;}
}
工厂类
public class OperationFactory {public static Operation createOperation(String operate) {Operation operation = null;switch (operate) {case "+":operation = new Add();break;case "-":operation = new Sub();break;case "*":operation = new Mul();break;case "/":operation = new Div();break;}return operation;}
}
客户端
class Client {public static void main(String[] args) {Operation operation = OperationFactory.createOperation("+");operation.getResult(1, 1);}
}