設計模式分爲三大類,創建型模式、結構型模式、行爲型模式,簡單工廠模式屬於創建型模式,那什麼是創建型模式呢?簡單的來說就是創建對象,如果從面向對象編程角度思考,從它的名字就能知道含義,在現實的世界工廠是製造東西的地方,那麼在編程的世界工廠就是生產“對象”的地方。但簡單工廠不屬於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;
}
}
簡單工廠模式優缺點:
優點:簡單工廠可以跟據客戶端給定的特殊信息來生產所需要的類,客戶端對於對象的創建細節是不可知的,也沒有必要知道,達到消費與生產分離。
缺點:當我們要開發另一種產品,也就是要再增加一個抽象類,以及增加一些它的繼承類,那麼簡單工廠就要增加判斷生產哪種產品的實例,這就違背“單一職責”;還有如果我要增加一個乘法運算,就要在簡單工廠中增加判斷,並且要重新編譯工廠類,這違背了“開閉原則”。
-_-沒有天才,只有勤奮的天才