`

简单工厂模式

 
阅读更多

《大话设计模式》  ---------------简单工厂模式

在网上找一下简单工厂模式的定义,然而没有找到比较官方的定义。

本人认为,简单工厂就是能生成一类相同的动做行为类。(可能不太准确)。

 

原型模式的结构

1) 定义工厂能生产出什么类型的类,此类最好是接口或者是抽象类  -----------------------------标记为(1)

2) 所有要生成的类都实现或继承“标记(1)”中所说的类---------------------------- -------------------标记为(2)

3)根据不同条件生成不同实现---------------------------------------------------------------------------标记为(3)

 

下图为简单工厂的UML图

=============================

 

 

 

 

上面标记(1)中所对应是上图中的 ,本工厂只生产运算类的子类。

标记(2)对应上图的“加法类、减法类等等” 它们都是运算类的子类

 

看代码

//工厂类所要生产的类

public abstract class Operation {

protected  double operation1;

protected  double operation2;

 

public double getOperation1() {

return operation1;

}

 

public void setOperation1(double operation1) {

this.operation1 = operation1;

}

 

public double getOperation2() {

return operation2;

}

 

public void setOperation2(double operation2) {

this.operation2 = operation2;

}

 

public abstract double getResult();

}

 

加运算对象

public class OperationAdd extends Operation{

 

@Override

public double getResult() {

return this.operation1+this.operation2;

}

   

}

 

除运算对象

public class OperationDivision extends Operation{

 

@Override

public double getResult() {

if(this.operation2==0) throw new RuntimeException("除数不能为0");

return this.operation1/this.operation2;

}

 

}

 

//乘法对象

public class OperationMul extends Operation{

 

@Override

public double getResult() {

return this.operation1*this.operation2;

}

 

}

 

//减法

public class OperationSub extends Operation{

 

@Override

public double getResult() {

return this.operation1-this.operation2;

}

 

}

 

 

 

工厂类

public class OperationFactory {

public static Operation createOperate(char operate) {

Operation oper = null;

switch (operate) {

case '+':

oper = new OperationAdd();

break;

case '-':

oper = new OperationSub();

break;

case '*':

oper = new OperationMul();

break;

case '/':

oper = new OperationDivision();

break;

default:

throw new RuntimeException("请输入正确的操作符");

}

return oper;

}

}

 

标记为(3)所说的意思就是 根据OperationFactory类createOperate方法的参数operate来生成不同实现的对象。

  • 大小: 40.9 KB
  • 大小: 6.4 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics