設計模式 簡單工廠模式

2021-08-05 21:32:55 字數 3158 閱讀 3695

簡單工廠模式是屬於建立型模式,又叫做靜態工廠方法(static factory method)模式,但不屬於23種gof設計模式之一。簡單工廠模式是由乙個工廠物件決定建立出哪一種產品類的例項。簡單工廠模式是工廠模式家族中最簡單實用的模式,可以理解為是不同工廠模式的乙個特殊實現。

簡單工廠模式的實質是由乙個工廠類根據傳入的引數,動態決定應該建立哪乙個產品類(這些產品類繼承自乙個父類或介面)的例項。

該模式中包含的角色及其職責如下:

簡單工廠模式的核心,它負責實現建立所有例項的內部邏輯。工廠類的建立產品類的方法可以被外界直接呼叫,建立所需的產品物件。

簡單工廠模式所建立的所有物件的父類,它負責描述所有例項所共有的公共介面。

是簡單工廠模式的建立目標,所有建立的物件都是充當這個角色的某個具體類的例項。

工廠類是整個模式的關鍵.包含了必要的邏輯判斷,根據外界給定的資訊,決定究竟應該建立哪個具體類的物件.通過使用工廠類,外界可以從直接建立具體產品物件的尷尬局面擺脫出來,僅僅需要負責「消費」物件就可以了。而不必管這些物件究竟如何建立及如何組織的.明確了各自的職責和權利,有利於整個軟體體系結構的優化。

由於工廠類集中了所有例項的建立邏輯,違反了高內聚責任分配原則,將全部建立邏輯集中到了乙個工廠類中;它所能建立的類只能是事先考慮到的,如果需要新增新的類,則就需要改變工廠類了。

當系統中的具體產品類不斷增多時候,可能會出現要求工廠類根據不同條件建立不同例項的需求.這種對條件的判斷和對具體產品型別的判斷交錯在一起,很難避免模組功能的蔓延,對系統的維護和擴充套件非常不利;

這些缺點在工廠方法模式中得到了一定的克服。

工廠類負責建立的物件比較少;

客戶只知道傳入工廠類的引數,對於如何建立物件(邏輯)不關心;

由於簡單工廠很容易違反高內聚責任分配原則,因此一般只在很簡單的情況下應用。

抽象產品(product)角色

package com.gof.entity;

/** *

*@classname: audi

*@description: 奧迪車的圖紙

*@author cheng

*@date 2017-8-8 下午05:06:23

*/public

inte***ce

audi

具體產品(concrete product)角色

package com.gof.entity;

/** *

*@classname: audia4

*@description: 奧迪a4系列

*@author cheng

*@date 2017-8-8 下午05:08:28

*/public

class

audia4

implements

audi

}

package com.gof.entity;

/** *

*@classname: audia6

*@description: 奧迪a6系列

*@author cheng

*@date 2017-8-8 下午05:16:17

*/public

class

audia6

implements

audi

}

package com.gof.entity;

/** *

*@classname: audia8

*@description: 奧迪a8系列

*@author cheng

*@date 2017-8-8 下午05:17:16

*/public

class

audia8

implements

audi

}

工廠(creator)角色

package com.gof.factory;

import com.gof.entity.audi;

import com.gof.entity.audia4;

import com.gof.entity.audia6;

import com.gof.entity.audia8;

/** *

*@classname: audifactory

*@description: 生產奧迪的工廠

*@author chengrui

*@date 2017-8-8 下午05:18:25

*/public

class

audifactory

/***

*@title: createaudi

*@description: 依據傳入的標識生產不同的奧迪

*@param type

*@return

*/public

static audi createaudi(string type) else

if ("a6".equals(type)) else

if ("a8".equals(type))

return

null;}}

測試

package com.gof.test;

import com.gof.entity.audi;

import com.gof.factory.audifactory;

/** *

*@classname: auditest

*@description: 測試

*@author chengrui

*@date 2017-8-8 下午05:22:51

*/public

class

auditest

}

執行結果

設計模式 工廠模式(簡單工廠)

一 簡單工廠 定義 簡單工廠模式 factory pattern 屬於類的創新型模式,又叫靜態工廠方法模式 static factorymethod pattern 是通過專門定義乙個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。特點 工廠類直接實現,乙個產品介面,乙個工廠類可以產生多...

設計模式(簡單工廠模式 工廠模式 抽象工廠模式)

當邏輯較為簡單時,可以直接建立對應的類。如下 include using namespace std class class banana class pear intmain 通過此 可以發現,使用者直接與客戶接觸,違背了dip 依賴倒轉 原則,過於麻煩,所以引出簡單工廠模式。include us...

設計模式 簡單工廠設計模式

請用任意一種物件導向語言實現計算器控制台程式,要求輸入兩個數和運算符號,得到結果。operation運算類 public class operation set public double numberb set public virtual double getresult 加減乘除類 using...