简单工厂设计模式中,工厂类是核心,是与外界直接交互的接口,包含了必要的逻辑判断,根据外界操作决定应该创建哪一个操作(Operation)类的对象。在简单工厂设计模式中,秉承减少冗余代码的原则,将所有操作抽象成一个独立的父类,父类中包含着所有操作需要的共有属性和方法。对于每一个独立的操作通过继承父类,创建出独立的子类.
例如:计算器:
/**
* Copyright © 2021-2022 AsiaInfo Technologies Limited.
* All Rights Reserved.
* -
* This software is the confidential and proprietary information of
* AsiaInfo Technologies Limited.
* ("Confidential Information"). You shall not disclose such
* Confidential Information and shall use it only in accordance with
* the terms of the license agreement you entered into with asiainfo.
* -
* ASIAINFO MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
* THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
* TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
* PARTICULAR PURPOSE, OR NON-INFRINGEMENT.ASIAINFO SHALL NOT BE LIABLE FOR
* ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
* DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
*/
package factory;
/****************************************************************
* Copyright © 2021,亚信科技(中国)有限公司
* All Rights Reserved.
*
* 文件名称: Operation.java
* 摘 要:[简要描述本文件的内容]
*
* 初始版本:1.0.0
* 原 作 者:fanxs
* 完成日期:2022年01月30日 15时44分
*
* 当前版本:1.0.0
* 作 者:fanxs
* 完成日期:2022年01月30日 15时44分
*****************************************************************/
public class Operation {
private double numA =0;
private double numB=0;
public double getNumA() {
return numA;
}
public void setNumA(double numA) {
this.numA = numA;
}
public double getNumB() {
return numB;
}
public void setNumB(double numB) {
this.numB = numB;
}
public double GetResult() throws Exception {
double result=0;
return result;
}
}
public class OperationAdd extends Operation{
@Override
public double GetResult() {
double result=0;
result=getNumA()+getNumB();
return result;
}
}
public class OperationDiv extends Operation{
@Override
public double GetResult() throws Exception {
double result=0;
if(getNumB()==0){
throw new Exception("除数不能为0");
}return getNumA()/getNumB();
}
}
public class OperationMub extends Operation{
@Override
public double GetResult() {
double result=0;
result=getNumA()*getNumB();
return result;
}
}
public class OperationSub extends Operation{
@Override
public double GetResult() {
double result=0;
result=getNumA()-getNumB();
return result;
}
}
public class OperationFactory {
public static Operation createOperate(String Operate){
Operation operation=null;
switch(Operate){
case "+":
operation=new OperationAdd();
break;
case "-":
operation=new OperationSub();
break;
case "*":
operation=new OperationMub();
break;
case "/":
operation =new OperationDiv();
break;
}
return operation;
}
}
public class Client {
public static void main(String[] args) throws Exception {
Operation operation= OperationFactory.createOperate("+");
operation.setNumA(10);
operation.setNumB(2);
System.out.println(operation.GetResult());
operation= OperationFactory.createOperate("-");
operation.setNumA(10);
operation.setNumB(2);
System.out.println(operation.GetResult());
operation= OperationFactory.createOperate("*");
operation.setNumA(10);
operation.setNumB(2);
System.out.println(operation.GetResult());
operation= OperationFactory.createOperate("/");
operation.setNumA(10);
operation.setNumB(2);
System.out.println(operation.GetResult());
}
}