设计模式之简单工厂模式

来源:互联网 发布:金融一体机安装软件 编辑:程序博客网 时间:2024/06/16 17:48

简单工厂模式是属于创建型模式,又叫做静态工厂方法(static Factory Method)模式,但不输入23中GOF设计模式之一。简单工厂模式根据传入参数的不同,创建不同的产品类。


以下是简单工厂类的简单实现(java):

<1>定义一个Operation类,定义变量和返结果。

public class Operation {
protected double numberA = 0;
protected double numberB = 0;
public double getNumberA() {
return numberA;
}
public void setNumberA(float numberA) {
this.numberA = numberA;
}
public double getNumberB() {
return numberB;
}
public void setNumberB(float numberB) {
this.numberB = numberB;
}
public double getResult() {
double result = 0;
return result;
}

<2>定义四个产品类继承自Operation 类,这里是实现两个数的加减乘除。

public class OperationAdd extends Operation{
public  double getResult() {
double result = 0;
result = numberA + numberB;
return result;
}
}

--------------------------------------------------------------

public class OperationSub  extends Operation{
public  double getResult() {
double result = 0;
result = numberA - numberB;
return result;
}
}

---------------------------------------------------------------

public class OperationMul  extends Operation{
public  double getResult() {
double result = 0;
result = numberA * numberB;
return result;
}
}

---------------------------------------------------------

public class OperationDiv  extends Operation{
public  double getResult() {
double result = 0;
if(numberB == 0) {
System.out.println("除数不能为0");
return -1;
}
result = numberA / numberB;
return result;
}
}

<3>定义工厂类SimpleFactory.

public class SimpleFactory {
public static Operation createOperation(String operate) {
Operation operation = null;
switch(operate) {
case "+":
operation = new OperationAdd();
break;
case "-":
operation = new OperationSub();
break;
case "*":
operation = new OperationMul();
break;
case "/":
operation = new OperationDiv();
break;
}
return operation;
}

<4>客户端程序,根据传入的操作符(参数)不同,创建不同的产品类。

public class Demo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Operation operate = SimpleFactory.createOperation("+");
operate.numberA = 5;
operate.numberB = 6;
System.out.println(operate.getResult());
}
}


0 0