设计模式分为三大类,创建型模式、结构型模式、行为型模式,简单工厂模式属于创建型模式,那什么是创建型模式呢?简单的来说就是创建对象,如果从面向对象编程角度思考,从它的名字就能知道含义,在现实的世界工厂是制造东西的地方,那么在编程的世界工厂就是生产“对象”的地方。但简单工厂不属于23种GOF设计模式之一。
简单工厂的概念:
1. 简单工厂模式又称为静态工厂方法模式,称为静态工厂是因为它创建对象的方法是静态,因此就不用实例化工厂本身来获取对象。
2. 简单工厂就是定义一个工厂类,然后根据不同的参数变量返回不同对象实例。
拿<<大话设计模式>>里面运算器例子说明,运算器能够执行加法和减法操作,定义一个操作接口,加法操作和减法操作实现操作接口,并且定义一个工厂来产生加法或者减法对象实例。简单工厂模式类图:
简单工厂模式具体实现:
package com.xll.simpleFactory;
/**
*Created by xll 2016/8/15
*/
public class Main {
public static void main(String[] args){
Operator operator = SimpleFactory.operator("add");
operator.setNumA(10.0);
operator.setNumB(12.0);
System.out.println(operator.getResult());
}
}
abstract class Operator{
public double numA;
public double numB;
public abstract double getResult();
public void setNumA(double numA) {
this.numA = numA;
}
public void setNumB(double numB) {
this.numB = numB;
}
}
class AddOperator extends Operator{
public AddOperator(){
}
@Override
public double getResult(){
return numA + numB;
}
}
class MinusOperator extends Operator{
public MinusOperator(){
}
@Override
public double getResult(){
return numA - numB;
}
}
class SimpleFactory{
public static Operator operator(String type){
Operator operator = null;
switch(type){
case "add":
operator = new AddOperator();
break;
case "minus" :
operator = new MinusOperator();
break;
}
return operator;
}
}
简单工厂模式优缺点:
优点:简单工厂可以跟据客户端给定的特殊信息来生产所需要的类,客户端对于对象的创建细节是不可知的,也没有必要知道,达到消费与生产分离。
缺点:当我们要开发另一种产品,也就是要再增加一个抽象类,以及增加一些它的继承类,那么简单工厂就要增加判断生产哪种产品的实例,这就违背“单一职责”;还有如果我要增加一个乘法运算,就要在简单工厂中增加判断,并且要重新编译工厂类,这违背了“开闭原则”。
-_-没有天才,只有勤奋的天才