具体可以分为:
(1).抽象产品(产品的特点)
(2).具体产品(产品的特点能做什么)
(3).工厂角色(能够是业务动态的选择产品的具体实现)
(4).客户端(就是客户进行操作的页面)
如图所示:工厂模式简化图(加减乘除)
如下是代码的案例:
抽象产品(产品的特点)
package factoryPattern;
/**
* @version 1.0
* @author: 小原
* @date: 2021-06-01 23:55
*/
public abstract class Operation {
private double num1;
private double num2;
private static Operation instance = new Operation() {
@Override
public double getResult() throws Exception {
return 0;
}
};
public double getNum1() {
return num1;
}
public void setNum1(double num1) {
this.num1 = num1;
}
public double getNum2() {
return num2;
}
public void setNum2(double num2) {
this.num2 = num2;
}
public abstract double getResult() throws Exception;
}
具体产品(产品的特点能做什么)
package factoryPattern;
/**
* @version 1.0
* @author: 小原
* @date: 2021-06-02 00:04
*/
public class OperationAdd extends Operation {
@Override
public double getResult() throws Exception {
return getNum1()+getNum2();
}
}
package factoryPattern;
/**
* @version 1.0
* @author: 小原
* @date: 2021-06-02 00:07
*/
public class OperationSub extends Operation {
@Override
public double getResult() throws Exception {
return getNum1()-getNum2();
}
}
package factoryPattern;
/**
* @version 1.0
* @author: 小原
* @date: 2021-06-02 00:08
*/
public class OperationMul extends Operation{
@Override
public double getResult() throws Exception {
return getNum1()*getNum2();
}
}
package factoryPattern;
/**
* @version 1.0
* @author: 小原
* @date: 2021-06-02 00:08
*/
public class OperationDiv extends Operation {
@Override
public double getResult() throws Exception {
if(getNum2()==0){
System.out.println("被除数不能为0"+getNum2());
}
return getNum1()/getNum2();
}
}
工厂角色(能够是业务动态的选择产品的具体实现)
package factoryPattern;
/**
* @version 1.0
* @author: 小原
* @date: 2021-06-02 00:12
*/
public class OperationFactory {
public static Operation operation=null;
public static Operation createFactory(String opr){
switch (opr){
case "+":
operation=new OperationAdd();
break;
case "-":
operation=new OperationSub();
break;
case "*":
operation=new OperationMul();
break;
case "/":
operation=new OperationDiv();
break;
default:
System.out.println("指令错误!");
break;
}
return operation;
}
}
客户端有两处代码,因为测试类中不易有很多的代码出现,所以直接抽出来一个类专门的对其测试进行总结
抽出来的处理类,如下:
package factoryPattern;
/**
* @version 1.0
* @author: 小原
* @date: 2021-06-02 00:18
*/
public class OperationAll {
public static void add(double num1, double num2) {
String opr = "+";
Operation of = OperationFactory.createFactory(opr);
of.setNum1(num1);
of.setNum2(num2);
try {
System.out.println("加法计算值:"+of.getResult());
} catch (Exception e) {
e.printStackTrace();
}
}
public static void sub(double num1, double num2) {
String opr = "-";
Operation of = OperationFactory.createFactory(opr);
of.setNum1(num1);
of.setNum2(num2);
try {
System.out.println("减法计算值:"+of.getResult());
} catch (Exception e) {
e.printStackTrace();
}
}
public static void mul(double num1, double num2) {
String opr = "*";
Operation of = OperationFactory.createFactory(opr);
of.setNum1(num1);
of.setNum2(num2);
try {
System.out.println("乘法计算值:"+of.getResult());
} catch (Exception e) {
e.printStackTrace();
}
}
public static void div(double num1, double num2) {
String opr = "/";
Operation of = OperationFactory.createFactory(opr);
of.setNum1(num1);
of.setNum2(num2);
try {
System.out.println("除法计算值:"+of.getResult());
} catch (Exception e) {
e.printStackTrace();
}
}
}
测试类:
package factoryPattern;
/**
* @version 1.0
* @author: 小原
* @date: 2021-06-02 00:26
*/
public class OperationTest {
public static void main(String[] args) {
OperationAll.add(3,2);
OperationAll.sub(6,3);
OperationAll.mul(2,4);
OperationAll.div(7,5);
}
}
运行结果如下