简单工厂模式
所谓的简单工厂模式-----------这里百度百科里面的解释:简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工引用百度厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。
简单点说就是一个工厂类根据传入的参数按照写好的业务逻辑动态进行对象(该对象继承了一个抽象的父类或接口)的创建。这样可以减少很多对象的创建,提高代码质量,同时也方便拓展和维护。
这个模式包含了3个角色:工厂角色,抽象类角色,具体产品类。
工厂类:封装了动态创建具体产品对象的业务逻辑。
抽象类角色:定义一系列的产品规范。
具体产品类:它是工厂的最终目标,工厂类按照自己的业务逻辑执行抽象类所定义的规范创建具体的产品类。
使用场景:
1.用于创建类比较少的时候。
2.客户知道要给予传入的参数类型
3.由于这种方法违反了高内聚的责任分配原则,所以一般用于比较简单的情况。
代码样例:(简单的计算器)
抽象类设计
/**
*
* @author Administrator
* 抽象类或父类接口
*
*/
public abstract class Operation {
public Operation() {
super();
// TODO Auto-generated constructor stub
}
public double m_NumA;
public double m_NumB;
public double getM_NumA() {
return m_NumA;
}
public void setM_NumA(double m_NumA) {
this.m_NumA = m_NumA;
}
public double getM_NumB() {
return m_NumB;
}
public void setM_NumB(double m_NumB) {
this.m_NumB = m_NumB;
}
public Operation(double m_NumA, double m_NumB) {
super();
this.m_NumA = m_NumA;
this.m_NumB = m_NumB;
}
//抽象方法
public abstract double GetResult();
}
具体类设计
public class OperationDiv extends Operation {
@Override
public double GetResult() {
// TODO Auto-generated method stub
double result=0.0d;
try{
result = m_NumA/m_NumB;
}catch(Exception e){
System.out.println("除数不能为0");
}
return result;
}
}
public class OperationMul extends Operation {
@Override
public double GetResult() {
// TODO Auto-generated method stub
return m_NumA*m_NumB;
}
}
public class OperationAdd extends Operation {
@Override
public double GetResult() {
return m_NumA+m_NumB;
}
}
public class OperationSub extends Operation{
@Override
public double GetResult() {
// TODO Auto-generated method stub
return m_NumA-m_NumB;
}
}
工厂类
/**
* 工厂类:封装了动态创建对象的逻辑
*
* @author Administrator
*
*/
public class Static_Factory {
public Operation CreateOperation(String type) {
Operation operation=null;
switch (type) {
case "+": {
operation = new OperationAdd();
}
break;
case "-": {
operation = new OperationSub();
}
break;
case "*": {
operation=new OperationMul();
}
break;
case "/": {
operation=new OperationDiv();
}
break;
default:break;
}
return operation;
}
public Static_Factory() {
super();
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
测试
public class Test {
public static void main(String[] args) {
//创建工厂
Static_Factory factory= new Static_Factory();
Operation operation = factory.CreateOperation("+");
operation.m_NumA=1;
operation.m_NumB=2;
System.out.println("结果为:"+operation.GetResult());
}
}