《大话设计模式》 ---------------简单工厂模式
在网上找一下简单工厂模式的定义,然而没有找到比较官方的定义。
本人认为,简单工厂就是能生成一类相同的动做行为类。(可能不太准确)。
原型模式的结构
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来生成不同实现的对象。