GOF之抽象工廠模式

2022-09-15 22:51:19 字數 2707 閱讀 9327

動機(motivation)

在軟體系統中,經常面臨著「一系列相互依賴的物件」的建立工作;同時,由於需求的變化,往往存在更多系列的物件的建立工作。

如何應對這種變化?如何繞過常規的物件建立方法(new),提供一種「封裝機制」來避免客戶程式和這種「多系列具體物件建立工作」的緊耦合?

意圖(intene)

提供乙個介面,讓該介面負責建立一系列「相關或者相互依賴的物件」,無需指定他們具體的類。

結構(stucture)

具體**實現:

1

對應圖中的abstractfactory

2abstract

class

facilitiesfactory

3

1

對應圖中的abstractproducta

2abstract

class

road38

set 9}

10public

abstract

void

roadmethod();

11 }

1

對應圖中的abstractproductb

2abstract

class

building38

set 9}

10public

abstract

void

buildingmethod();

11 }

1

對應圖中的concretefactory1

2class

modenfacilities:facilitiesfactory38

9public

override

building createbuilding()

1013 }

1

對應圖中的concretefactory2

2class

classicfacilities:facilitiesfactory38

9public

override

building createbuilding()

1013 }

1

對應圖中的client

2class

gamemanage311

public

void

buildfacilities()

1216

public

void

run()

1721 }

1

對應圖中的producta1

2class

modenroad:road

3的道路

",this

.name);7}

8public modenroad(string

name)

912 }

1

對應圖中productb1

2class

modenbuilding:building

3的建築物

",this

.name);8}

9public modenbuilding(string

name)

1013 }

1

對應圖中producta2

2class

classicroad:road

3的道路

", this

.name);7}

8public classicroad(string

name)

912 }

1

對應圖中productb2

2class

classicbuilding:building

3的建築物

", this

.name);7}

8public classicbuilding(string

name)

912 }

1

這是主函式的呼叫

2static

void main(string

args)

3

abstract factory模式的幾個要點如果沒有應對「多系列物件構建」的需求變化,則沒有必要使用abstract factory模式,這時候使用簡單的靜態工廠。

「系列物件」指的是這些物件之間有相互依賴、或作用的關係,例如遊戲開發場景中的「道路」與「房屋」的依賴。

abstract factory模式主要在於應對「新系列」的需求變動,其缺點在於難以應對「新物件」的需求變動。

abstract factory模式經常和factory method模式共同組合來應對「物件建立」的需求變化。

Gof 抽象工廠模式

繼續打卡設計模式 今天聊一下抽象工廠模式 依然回到我們訂購披薩的需求 我們現在依然存在北京的 希臘 乳酪 胡椒三種口味 以及倫敦 希臘 乳酪 胡椒三種口味 學習抽象工廠一定先了解一下簡單工廠模式 那麼現在我們看看二者的區別在 首先我們需要有乙個pizza的基類 author 德鑫 descripti...

設計模式GOF23 抽象工廠模式

抽象工廠模式 abstract factory 是建立者模式的一種,是一種負責建立物件的模式。抽象工廠算是工廠模式的一種,因為邏輯和實現相對複雜一些,所以在設計模式中不少說明都是分開說明的。抽象工廠也是為了實現物件建立和物件使用的分離。工廠模式雖然已經實現了這一需求,但是還是不夠徹底。比如 如果建立...

GOF23設計模式之抽象工廠模式的實現

package com.bjsxt.cn.abstractfactory public inte ce engineclass luxuryengine implements engine override public void start class lowengine implements e...