一、定义
1、工厂方法模式:核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。
2、简单工厂方法:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。二、结构图(以计算为例)
三、代码示例
1、演示代码Action.java
/**
* @use 简单工厂方法及工厂方法模式的加法四则运算测试
* @author lattice
* @date 2016-12-20
*/
public class Action {
public static void main(String[] args) {
{//简单工厂方法实现加减惩罚运算
Operation op=null;
op=OperationSimpleFactory.createOperation("/");
op.numberA=1;
op.numberB=2;
System.out.println("简单工厂方法(switch):\t"+op.getResult());
}
{//工厂方法模式来实现加减乘除四则运算
IYunsuanFactory fact=new AddFactory();
Operation op=fact.createOperation();
op.numberA=10;
op.numberB=20;
System.out.println("简单工厂方法模式(接口):\t"+op.getResult());
}
}
}
2、加减乘除运算类operation.java
/**
* @use 加减乘除类的具体实现
* @author lattice
*
*/
public class Operation {
double numberA;
double numberB;
public double getResult(){
return this.numberA+this.numberB;
}
}
class OprationAdd extends Operation{
public double getResult(){
return this.numberA+this.numberB;
}
}
class OprationSub extends Operation{
public double getResult(){
return this.numberA-this.numberB;
}
}
class OprationMul extends Operation{
public double getResult(){
return this.numberA*this.numberB;
}
}
class OprationDiv extends Operation{
public double getResult(){
return this.numberA/this.numberB;
}
}
3、简单工厂方法OperationSimpleFactory.java
/**
* @use 简单工厂方法实现计算加减乘除
* @author lattice
* @date 2016-12-20
*/
public class OperationSimpleFactory {
public static Operation createOperation(String oprate){
Operation operation=null;
switch(oprate){
case "+": operation = new OprationAdd(); break;
case "-": operation = new OprationSub(); break;
case "*": operation = new OprationMul(); break;
case "/": operation = new OprationDiv(); break;
default:return null;
}
return operation;
}
}
4、工厂模式类IYunsuanFactory.java
/**
* 运算工厂类
* @use 加减乘除接口,及加减乘除工厂实现
* @author lattice
*
*/
interface IYunsuanFactory {
Operation createOperation();
}
class AddFactory implements IYunsuanFactory{
public Operation createOperation(){
return new OprationAdd();
}
}
class SubFactory implements IYunsuanFactory{
public Operation createOperation(){
return new OprationSub();
}
}
class MulFactory implements IYunsuanFactory{
public Operation createOperation(){
return new OprationMul();
}
}
class DivFactory implements IYunsuanFactory{
public Operation createOperation(){
return new OprationDiv();
}
}