简单工厂模式:由一个叫做工厂类的东西决定生产什么样的实例,你只要传递一个信息给工厂类,工厂类就知道应该生产什么样的产品。
工厂:生产具体产品的东西
产品:继承了一个基类或者接口,这个接口或基类抽象出了公共的变量和方法,具体实现由产品去实现
优点:松耦合,添加功能方便
例:使用简单工厂模式实现一个计算器类
1、建立一个抽象基类
/**
*Jun 27, 2013
*Copyright(c)JackWang
*All rights reserve
*@Author <a href="mailto:wangchengjack@163.com">JackWang</a>
*/
package com.example.simplefactory;
public abstract class Operator {
private Double numA; //第一个操作数
private Double numB; //第二个操作数
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;
}
/**
* 运算方法,由具体的类实现
* @return
*/
public abstract Double getResult();
}
2、四个具体实现类 实现 加 减 乘 除
/**
*Jun 27, 2013
*Copyright(c)JackWang
*All rights reserve
*@Author <a href="mailto:wangchengjack@163.com">JackWang</a>
*/
package com.example.simplefactory;
public class OperatorAdd extends Operator {
@Override
public Double getResult() {
return this.getNumA() + this.getNumB();
}
}
/**
*Jun 27, 2013
*Copyright(c)JackWang
*All rights reserve
*@Author <a href="mailto:wangchengjack@163.com">JackWang</a>
*/
package com.example.simplefactory;
public class OperatorSub extends Operator {
@Override
public Double getResult() {
return this.getNumA() - this.getNumB();
}
}
/**
*Jun 27, 2013
*Copyright(c)JackWang
*All rights reserve
*@Author <a href="mailto:wangchengjack@163.com">JackWang</a>
*/
package com.example.simplefactory;
public class OperatorMuti extends Operator{
@Override
public Double getResult() {
return this.getNumA() * this.getNumB();
}
}
/**
*Jun 27, 2013
*Copyright(c)JackWang
*All rights reserve
*@Author <a href="mailto:wangchengjack@163.com">JackWang</a>
*/
package com.example.simplefactory;
public class OperatorDiv extends Operator{
@Override
public Double getResult() {
if (this.getNumB() == 0) {
throw new RuntimeException("除数不能为0!!!");
}
return this.getNumA() / this.getNumB();
}
}
3、实现工厂类
/**
*Jun 27, 2013
*Copyright(c)JackWang
*All rights reserve
*@Author <a href="mailto:wangchengjack@163.com">JackWang</a>
*/
package com.example.simplefactory;
public class OperatorFactory {
public static Operator operators(String oper){
Operator operator = null;
switch (oper) {
case "+":
operator = new OperatorAdd();
break;
case "-":
operator = new OperatorSub();
break;
case "*":
operator = new OperatorMuti();
break;
case "/":
operator = new OperatorDiv();
break;
default:
break;
}
return operator;
}
}
4、测试
/**
*Jun 27, 2013
*Copyright(c)JackWang
*All rights reserve
*@Author <a href="mailto:wangchengjack@163.com">JackWang</a>
*/
package com.example.simplefactory;
public class Caculator {
public static void main(String[] args) {
Operator operators = OperatorFactory.operators("+");
operators.setNumA(5.0);
operators.setNumB(6.0);
System.out.println(operators.getResult());
Operator operators2 = OperatorFactory.operators("-");
operators2.setNumA(5.0);
operators2.setNumB(6.0);
System.out.println(operators2.getResult());
Operator operators3 = OperatorFactory.operators("*");
operators3.setNumA(5.0);
operators3.setNumB(6.0);
System.out.println(operators3.getResult());
Operator operators4 = OperatorFactory.operators("/");
operators4.setNumA(5.0);
operators4.setNumB(6.0);
System.out.println(operators4.getResult());
Operator operators5 = OperatorFactory.operators("/");
operators5.setNumA(5.0);
operators5.setNumB(0.0);
System.out.println(operators5.getResult());
}
}
---------------------------------------------------------
例子改编自《大话设计模式》 作为学习记录
1172

被折叠的 条评论
为什么被折叠?



