硬肝系列 23種設計模式之抽象工廠模式

2021-10-22 07:24:57 字數 3331 閱讀 5299

對於「設計模式」這個詞大家肯定都不陌生,很多框架也用到了設計模式,但是大部分的開發者應該是沒有深入的了解過,我準備硬肝下這23設計模式作為專題文章的開端,一共23種設計模式,我盡量在<23天肝完。

為什麼要學習設計模式:

在我大學四年,對設計模式也沒有什麼概念,寫**就想著能實現就可以了,不會有設計模式那樣的思想,但是當學習到了框架的時候,對於設計模式才有了一些更深入的了解,使用設計模式的**在擴充套件性上會比暴力的**更容易維護,特別是當乙個程式猿離職了後,你去接手它的**,裡面是一大堆if else,這樣真的會崩潰,修改都不知道從何下手

23種設計模式之工廠模式

23種設計模式之抽象工廠模式

23種設計模式之建造者模式

23種設計模式之原型模式

23種設計模式之單例模式

23種設計模式之介面卡模式

23種設計模式之橋梁模式

23種設計模式之**模式

23種設計模式之外觀模式

23種設計模式之裝飾器模式

23種設計模式之享元模式

23種設計模式之組合模式

23種設計模式之責任鏈模式

23種設計模式之命令模式

23種設計模式之迭代器模式

23種設計模式之中介者模式

23種設計模式之備忘錄模式

說到抽象工廠模式前,首先需要理解兩個概念,乙個是類別,乙個是族群

類別:滑鼠、鍵盤、顯示器…

族群:

大族群:

滑鼠:mac滑鼠、dell滑鼠.

. 鍵盤:mac鍵盤、dell鍵盤.

.

從上面的結構可以看得出來我的出乙個結論,使用抽象工廠模式創造出來的**,縱向擴充套件容易,橫向擴充套件困難,為什麼呢?接下來我用**了帶大家來了解一下抽象工廠模式。

mouse介面:

package designmodels.abstractmodels;

public

inte***ce

mouse

keyboard介面:

package designmodels.abstractmodels;

public

inte***ce

keyboard

上面這兩個介面就是族群裡的大族群抽象介面:滑鼠和鍵盤,下面為滑鼠的實現類:

macmouse實現mouse介面:

package designmodels.abstractmodels;

public

class

macmouse

implements

mouse

}

dellmouse實現mouse介面:

package designmodels.abstractmodels;

public

class

dellmouse

implements

mouse

}

下面為鍵盤族群的實現類:

mackeyboard實現keyboard介面:

package designmodels.abstractmodels;

public

class

mackeyboard

implements

keyboard

}

dellkeyboard實現keyboard介面:

package designmodels.abstractmodels;

public

class

dellkeyboard

implements

keyboard

}

接下來才是抽象工廠類最重要的一步,不是為兩個大族群(滑鼠、鍵盤)建立工廠類,而是根據大族群裡的類別(也就相當於mac、dell兩個廠商),因為是廠商幫你建立的mousekeyboard,這樣極大方便了我們的使用,只要呼叫對應的方法即可購買到我們想要的滑鼠,將使用者與建立者解耦合,方便維護,也方便橫向擴充套件。

下面為抽象工廠介面

package designmodels.abstractmodels;

public

inte***ce

factory1

macfactory

package designmodels.abstractmodels;

public

class

macfactory

implements

factory1

@override

public keyboard createkeyboard()

}

dellfactory:

package designmodels.abstractmodels;

public

class

dellfactory

implements

factory1

@override

public keyboard createkeyboard()

}

main方法測試:

package designmodels.abstractmodels;

public

class

test

}

返回結果:

hello i'm dellmouse!

!!

這個缺點要重點說一下,對於現有族群裡存在的物件非常友好,新增工廠類即可完成對**的擴充套件,不會影響到之前的**,但是再加乙個類別則會破壞ocp原則。因為需要對抽象工廠類的**更改,還有乙個優化,使用抽象類繼承介面,這樣即使抽象類中新增了方法,實現類也可以不一定要實現。

最後來說一下我們的呼叫流程:

抽象工廠——>具體的工廠——>返回具體實現類——>呼叫類中的方法

完成:to: 2021/3/15 21:22

硬肝系列 23種設計模式之介面卡模式

對於 設計模式 這個詞大家肯定都不陌生,很多框架也用到了設計模式,但是大部分的開發者應該是沒有深入的了解過,我準備硬肝下這23設計模式作為專題文章的開端,一共23種設計模式,我盡量在 23天肝完。為什麼要學習設計模式 在我大學四年,對設計模式也沒有什麼概念,寫 就想著能實現就可以了,不會有設計模式那...

23種設計模式之抽象工廠模式

定義 為建立一組相關或者是相互依賴的物件提供介面,而不需要指定它們的具體類 使用場景 乙個物件族有相同的約束時可以使用抽象工廠模式。類圖 抽象工廠模式與工廠方法模式的區別 抽象工廠模式是工廠方法模式的公升級版本,他用來建立一組相關或者相互依賴的物件。他與工廠方法模式的區別就在於,工廠方法模式針對的是...

23種設計模式之 抽象工廠模式

提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類 相比入工廠模式而言,如果說工廠模式支援增加任意產品。那麼抽象工廠模式增加新的產品線很容易,但是無法增加新的產品。而簡單工廠模式和工廠模式的區別可以認為工廠模式是優化了簡單工廠模式,遵循了開閉原則 public inte ce com...