以逸待勞 工廠方法模式

2021-10-06 10:05:22 字數 3198 閱讀 9609

工廠方法模式

相關原始碼

logback的體現

綜述​ 學習設計模式,最最最核心的一點就是,模式的適用場景,如果脫離的業務場景,或者適用場景,為了模式而模式,那…反而對自己原有的編碼習慣造成巨大衝擊,最後只能是走火入魔了。

​ 對於工廠方法模式,我們可以先回想平常編碼中建立物件的方式。

我們通常建立物件就是:new。例如:

/** 第一種 建立,然後各種set,這個佔比應該很高 */

aaa aaa =

newaaa()

;aaa.

seta

("a");

aaa.

setx

("x");

// ...

/** 第二種 直接全參或者有參構造,目前自己見的少一些 */

aaa aaa =

newaaa

("a"

,"x"

,"...");

/** 第三種 根據不同情況建立不同的物件 */if(

"a".

equals

(type)

)elseif(

"b".

equals

(type)

)else

上面**中展示的,有乙個共同點,客戶端(要建立某個物件的類)在建立某個物件的時候,必須知道這個物件張什麼樣子,應該給什麼引數,相當於是直接和物件本身的類打交道。這麼做有什麼弊端嗎?

​ 定義個建立物件的介面,但是讓實現這個介面的類來決定例項化哪個類。工廠方法讓類的例項建立推遲到子類實現。文字描述有些乾枯,往下,看**和uml。

開閉原則:物件導向程式設計中,開閉原則規定,軟體中的物件(類,模組,方法)應該對於擴充套件開放,對於修改關閉。什麼叫做擴充套件?就是可以新增。什麼叫做修改,就是在當前類新增**。

code的過程並不是直接上手,而是進行業務分析,產出技術文件之後,然後進行編碼。所以大多時候,都是在設計和除錯(找bug)。編碼的過程其實只占用了20%左右的時間。

業務場景

業務分析

模型抽象

廠商 uml

這樣在進行品牌擴充套件的時候,只需要新增品牌冰箱,以及對應品牌廠商即可。符合開閉原則,且重複的建立物件過程被一同封裝在了工廠中

編碼

/**

* 冰箱

* */

public

abstract

class

fridge

protected

abstract

void

show()

;}

/**

* 格力冰箱

*/public

class

greefridge

extends

fridge

@override

protected

void

show()

}

/**

* 海爾冰箱

*/public

class

haierfridge

extends

fridge

@override

protected

void

show()

}

/**

* 美的冰箱

*/public

class

mideafridge

extends

fridge

@override

protected

void

show()

}

/**

* 冰箱工廠

* */

public

inte***ce

fridgefactory

/**

* 格力冰箱工廠

*/public

class

greefridgefactory

implements

fridgefactory

}

/**

* 海爾冰箱工廠

*/public

class

haierfridgefactory

implements

fridgefactory

}

/**

* 美的冰箱工廠

*/public

class

mideafridgefactory

implements

fridgefactory

}

/**

* 客戶端

*/public

class

maintest

// 展示建立結果

fridge.

show();}}

collection

collection有個iterator功能。這個功能就是獲取乙個迭代器。collection有很多實現類,每乙個實現類中有它自己的迭代器,我們在獲取迭代器的時候,只需要指定某個collection的實現類,然後獲取迭代器即可。

與冰箱業務場景的對應關係:

urlstreamhandle***ctory

這個…偷個懶,讀者可以自己分析一下。

記不記得**中通常會有這麼一行

private

static

final logger logger = logge***ctory.

getlogger

(aaaa.

class

);

這個獲取乙個日誌記錄的物件,也是使用的工廠方法模式。同時這個裡面不僅僅只有工廠方法模式,還有單例模式,等等,所以一款優秀的框架,它裡面的各種設計,是非常有講究的,這也是為什麼閱讀開源框架原始碼,對自己而言會有很大提公升的原因之一。

​ 工廠方法模式最最最核心的2點:

工廠方法模式 工廠方法模式

工廠方法模式是簡單工廠模式的公升級版,簡單工廠模式不符合設計模式的原則 即 單一職責,開閉原則 優點 職責明確,擴充套件方便 缺點 需要建立多個工廠 實現步驟 1.將工廠通用方法抽取介面 例如 ifactory 2.將產品抽取介面 例如 icar 3.實現各種產品 例如 baomacar,benti...

工廠方法模式 工廠方法模式 二

工廠方法模式是對簡單工廠的進一步抽象和封裝,需要新的類物件時不需要對既有工廠類進行修改,而是增加新的工廠類。工程類可以使用模版進一步封裝,由編譯器來生成 從而減少 編寫工作量。工廠方法的 c 實現01part產品抽象基類class animal virtual void show 0 02part產...

工廠方法模式(一) 簡單工廠方法模式

ps 第二篇學習部落格,堅持就是勝利。繼續設計模式的學習,記錄工廠模式,加深自己的理解。基本結構 abstractproduct 用來定義基本的商品的抽象 public abstract class abstractphoneproduct 用來實現抽象商品,生成各種商品 public class ...