簡介
簡單工廠模式 (Simple Factory) 又叫靜態工廠方法(Static Factory Method)模式。
簡單工廠模式一般是定義一個工廠類,這個類能夠根據不一樣變量返回不一樣類的產品實例。
html
簡單工廠模式是一種
對象建立型模式 (
可參考
設計模式 建立型模式)。可是簡單工廠模式
不屬於23種Gof設計模式之一。
實例
如何實現一個具備加減乘除基本功能的計算器?
設計模式
對於這四種運算來講,都須要兩個操做數,差異僅在於返回的結果不一樣。ide
由此,咱們能夠抽象化它們的共性,提煉出一個父類。這個類中包含兩個操做數,一個返回結果方法,這個方法指望在子類中得以實現。
測試
如下經過具體代碼來講明。
spa
圖-簡單工廠模式結構圖
Product (Operation) : 產品角色,簡單工廠模式所建立的全部對象的父類,它負責描述全部實例所共有的公共接口。
設計
//
Product角色,全部實例所共有的公共接口
abstract
class Operation {
public
int numA;
public
int numB;
public
abstract
int GetResult();
}
ConcreteProduct組 : 具體產品角色,實現 Product 中的接口。
//
ConcreteProduct 角色,實現 Product 中的接口
class Add
extends Operation {
@Override
public
int GetResult() {
return numA + numB;
}
}
//
ConcreteProduct 角色,實現 Product 中的接口
class Sub
extends Operation {
@Override
public
int GetResult() {
return numA - numB;
}
}
//
ConcreteProduct 角色,實現 Product 中的接口
class Mul
extends Operation {
@Override
public
int GetResult() {
return numA * numB;
}
}
//
ConcreteProduct 角色,實現 Product 中的接口
class Div
extends Operation {
@Override
public
int GetResult() {
if (numB == 0) {
System.out.println("ERROR!");
return -1;
}
return numA / numB;
}
}
Factory (OperationFactory) : 工廠角色,簡單工廠模式的核心,它負責實現建立全部實例的內部邏輯。工廠類的建立產品類的方法能夠被外界直接調用,建立所需的產品對象。code
//
工廠角色,簡單工廠模式的核心,它負責實現建立全部實例的內部邏輯
class OperationFactory {
public
static Operation CreateOperation (
char operate) {
Operation oper =
null;
switch(operate) {
case '+':
oper =
new Add();
break;
case '-':
oper =
new Sub();
break;
case '*':
oper =
new Mul();
break;
case '/':
oper =
new Div();
break;
default:
break;
}
return oper;
}
}
測試代碼htm
public
class SimpleFactoryPattern {
public
static
void main(String[] args) {
int numA = 10;
int numB = 3;
int result = 0;
Operation oper = OperationFactory.CreateOperation('+');
oper.numA = numA;
oper.numB = numB;
result = oper.GetResult();
System.out.println(numA + " + " + numB + " = " + result);
}
}
運行結果對象
要點
優勢
簡單工廠模式的工廠類是整個模式的關鍵。其中包含了必要的邏輯判斷,根據外部信息,決定究竟應該建立哪一個具體類的對象。
blog
經過使用簡單工廠模式,用戶無需瞭解對象如何建立的,只要傳入必要信息就能夠了。
缺點
工廠類集中了全部實例的建立邏輯,違背了高內聚責任分配原則。
隨着系統中具體產品類不斷增多,勢必要不斷修改工廠類,不易維護和擴展。同時,這也違背了開放封閉原則。
推薦閱讀
本文屬於 設計模式系列 。
簡單工廠模式屬於工廠模式家族,歡迎參考閱讀 工廠方法模式 、抽象工廠方法模式 。
參考資料
《大話設計模式》 《HeadFirst設計模式》