使用原因
同一个调用,需要不同对象。统一通过工厂生产不同对象,创建对象的逻辑在工厂中。
定义
简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,不属于23种GOF设计模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。
优点
工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定该创建哪个具体类的对象.通过使用工厂类,外界不需要直接创建对象,直接通过工厂获取需要的对象就可以了。而不必管这些对象究竟如何创建及如何组织的.明确了各自的职责和权利,有利于整个
软件体系结构的优化。
缺点
由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。(修改产品改产品,增加产品需要改工厂和产品)
ps.以上内容来自百度百科
示例:
工厂根据传入的数据,生产出相应的对象
//计算方式 工厂类,用于生产相应的算法子类
public class OperationFactory {
public Operation getOperation(String operator){
Operation oa = null;
switch(operator){
case "+":
oa = new AddOperation();
return oa;
case "-":
oa = new SubtractOperation();
return oa;
/*case "*":
oa = new MultiplicationOperation();
return oa;
case "/":
oa = new DivisionOperation();
return oa;*/
}
return null;
}
}
//算法接口 定义方法
public interface Operation {
public double getResult(double numA, double numB);
}
//算法实现类,由工厂类创建,重写父类中的虚函数 加减乘除都需要有单独的类
public class AddOperation implements Operation {
@Override
public double getResult(double numA, double numB) {
// TODO Auto-generated method stub
return numA + numB;
}
}
........
//测试类
import java.util.Scanner;
public class MainProgream {
public static void main(String args[]){
while(true){
try{
Scanner input =new Scanner(System.in);
System.out.println("input numA");
String instr = input.nextLine();
double numA = Double.parseDouble(instr);
System.out.println("input numB");
instr = input.nextLine();
double numB = Double.parseDouble(instr);
System.out.println("input + - * / ");
instr = input.nextLine();
String operator = instr;
System.out.print(numA + operator + numB + "=" );
Operation o = new OperationFactory().getOperation(operator);
System.out.println(o.getResult(numA, numB));
}catch(Exception e){
System.out.println("输入格式不对");
}
}
}
}