設計模式之工廠方法

2021-08-21 10:17:27 字數 1305 閱讀 1115

上篇我們提到了為了更好地解耦,我們引入了簡單工廠設計模式。

但是簡單工廠模式還存在問題,就是乙個工廠不是萬能的,我們不能要求乙個工廠既生產這個,又生產那個。

為解決這個問題,我們來學習一下工廠方法設計模式。

簡單地說,工廠方法就是把生產不同品牌的工廠分離開來,乙個工廠專注於生產乙個品牌,生活化些,就是我們不能要求乙個鞋廠既生產耐克,又生產阿迪達斯,耐克和阿迪達斯應該是兩個分開的工廠。

好的,下面我們來寫**:

還是上次我們用的麵包的例子,我們首先看一下麵包類的**:

public inte***ce bread
//此處的danxiang為麵包品牌

public class danxiangbread implements bread

}

//此處的桃李為麵包品牌

public class taolibread implements bread

}

然後開始寫工廠類,此處於簡單工廠不同的是,簡單工廠只有乙個工廠,這個簡單工廠既生產桃李麵包,又生產丹香麵包。而此處將生產桃李麵包的工廠和生產丹香麵包的工廠分離開來,這就使桃李工廠專注於生產桃李麵包,丹香工廠專注於生產丹香麵包,下面來看**:

工廠介面:

public inte***ce factory
桃李麵包工廠:

public class taolibreadfactory implements factory 

}

丹香麵包工廠:

public class danxiangbreadfactory implements factory 

}

好了,我們來寫乙個測試類測試一下:

public class test 

}

我們可以看到,工廠方法設計模式將生產不同品牌麵包的工廠分離開來,這樣可以使乙個工廠專注於乙個品牌的特色,**層面說,**可以更好地解耦。

但是,工廠方法也有他的不足之處,我們來仔細看一下測試類的**:

我們可以看到,我們為了得到桃李麵包,首先要new乙個taolibreadfactory的例項。反映在現實生活中就是,消費者為了吃乙個桃李麵包,首先要到桃李麵包廠去;想要吃乙個丹香麵包,又要到丹香麵包廠去。顯然這是不合理的。反映到**中就是,客戶端程式員要得到乙個例項,首先要new乙個生產該例項的方法,這無疑增加了客戶端程式員**的複雜度。

為了解決這個問題,抽象工廠設計模式產生了。

設計模式之工廠方法

工廠方法是在簡單工廠的基礎上的進一步抽象,在簡單工廠中,所有的物件都是通過乙個工廠來建立,在工廠方法中,每個物件都有特定的工廠來建立。抽象介面 車 package com.yf.designpattern.factorymethod public inte ce car 具體實現類 寶馬和賓士 pa...

設計模式之工廠方法

言歸正傳,後來 我們開始了重頭戲 設計模式 工廠三姐妹,因為十三期的師弟沒有接觸過這些知識二來因為自己學藝不精,所以當時講得有些吃力,這就尷尬了 是吧 為了挽回一點顏面,當下決定回去寫一篇部落格,但是 經常說 但是 不好 不過因為因為一直奮戰在itoo 這個總結沒有及時地動手去做,不過現在有時間了 ...

設計模式之工廠方法

軟體架構師需要關係設計模式 當有提示時 客戶端最常用的是彈出message對話方塊 服務端最常用的是寫日誌檔案。下面的例子假定五個開發組參與 核心邏輯組 class ishow class iglobe void init iglobe globe,uint uid 服務端業務邏輯組 namespa...