第一定义一个抽象工厂:
/**
* 接口实现对象选择
*@author YangQuanqing
*Data:2014-2-24
*
*/
public interface FactoryInterface {
//返回具体运算类
public abstract Operation getOperation();
}
第二定义一个抽象的操作类
/**
* 功能:定义一个抽象类用于算术运算
*@author YangQuanqing
*Data:2014-2-24
*
*/
public abstract class Operation {
//计算运算后的结果
public abstract double getResult();
public abstract void setOperNums(double numA,double numB);
}
第三定义具体的操作类
/**
*
*功能:实现加法运算
*@author YangQuanqing
*Data:2014-2-24
*
*/
public class OperationAdd extends Operation {
private double numA=0;
private double numB=0;
private double result=0;
public void setOperNums(double numA,double numB)
{
this.numA=numA;
this.numB=numB;
}
/* (non-Javadoc)
* @see FactoryMethod.Operation#getResult()
*/
@Override
public double getResult() {
result=numA+numB;
return result;
}
}
/**
*
*功能:实现减法运算
*@author YangQuanqing
*Data:2014-2-24
*
*/
public class OperationSub extends Operation{
private double numA=0;
private double numB=0;
private double result=0;
public void setOperNums(double numA,double numB)
{
this.numA=numA;
this.numB=numB;
}
/* (non-Javadoc)
* @see FactoryMethod.Operation#getResult()
*/
@Override
public double getResult() {
result=numA+numB;
return result;
}
}
第四定义具体的工厂
/**
* 功能:减法运算工厂类
*@author YangQuanqing
*Data:2014-2-24
*
*/
public class SubFactory implements FactoryInterface{
private Operation oper=null;
/* (non-Javadoc)
* @see FactoryMethod.FactoryInterface#getOperation()
*/
@Override
public Operation getOperation() {
oper=new OperationSub();
return oper;
}
}
/**
* 功能:加法工厂方法
*@author YangQuanqing
*Data:
*
*/
public class AddFactory implements FactoryInterface{
//private Operation oper=null;
/* (non-Javadoc)
* @see FactoryMethod.FactoryInterface#getOperation()
*/
@Override
public Operation getOperation() {
Operation oper=null;
oper=new OperationAdd();
return oper;
}
}
第五客户端调用
/**
* 工厂方法模式客户端
*@author YangQuanqing
*Data:
*
*/
public class FactoryMethodClinet {
public static void main(String[] args)
{
FactoryInterface factory=null;
Operation oper=null;
factory=new AddFactory();
oper=factory.getOperation();
oper.setOperNums(50, 30);
System.out.print(oper.getResult());
}
}