設計模式 工廠模式

2021-08-08 06:26:06 字數 3891 閱讀 5569

個人部落格,想要搭建個人部落格的可以進來看看:

工廠方法模式,定義了乙個建立物件的介面,單由於子類決定要例項化的類是哪乙個。工廠方法把例項化推遲到子類

抽象工廠模式,提供了乙個介面,用於建立相關或依賴物件的家族,而不需要明確指定具體類

設計模式系列原始碼:

背景 , 我們是披薩廠家,要給我們的客戶提供乙個訂餐系統,可以預定我們各種各樣的披薩(撈蛤披薩,乳酪披薩),各地的披薩(北京的,西安的),需要注意的是,西安的乳酪披薩和北京的乳酪披薩不同,撈蛤的也不同…

1.普通想法

public

class

nofactory else

if(type.equalsignorecase("clampizza"))

return pizza;

}public

static

void

main(string args)

}

code唯一不變的就是一直在變化,但是我們的披薩種類會一直增加,所以後邊要一直改變if那部分**,這樣的設計是存在問題的。

2.簡單工廠方式

簡單工廠的目的,主要負責實現生產物件的細節,根據訂單來生產。每乙個商店有對應著自己的工廠。

/**pizza 的父類*/

public

abstract

class

pizza

}/**乳酪披薩*/

public

class

cheesepizza

extends

pizza

}/**撈蛤披薩*/

public

class

clampizza

extends

pizza

}

簡單工廠類,僅僅負責生產不同的披薩

/**簡單披薩工廠*/

public

class

******factory else

if(type.equalsignorecase("clampizza"))

return pizza;}}

披薩訂餐系統

/**披薩訂單系統*/

public

class

pizzastore

//預定披薩

public pizza orderpizza(string type)

}

測試main

public

class

main

}//結果

上面是簡單工廠的uml圖,**僅僅使用了pizza類的prepare()和box()方法,也僅僅實現了2個具體類,有說明意義就可以 ,上面的pizza用抽象類實現的好處是不同的披薩中不同的操作可以留給子類實現;並且在pizzastore使用pizza的呼叫方法,可以不用關心到底是哪個具體的披薩,保證了在後面的變動中,僅僅只需要改變******factory就可以,pizzastore**完全不需要修改

3.工廠方法模式

這裡就要引入不同地方的披薩,北京和西安的乳酪披薩是不一樣的,所以我們的改變是不需要上面的簡單工廠類,直接在pizzastore中寫乙個抽象的

createpizza()方法,具體的實現留給不同地區的訂餐系統來決定,各個地區的訂餐系統都要繼承這個pizzastore

pizza類

public

abstract

class

pizza

}/**西安的乳酪披薩*/

public

class

xiancheesepizza

extends

pizza

}/**北京的的乳酪披薩*/

public

class

beijingcheesepizza

extends

pizza

}

訂餐系統

/**訂餐系統*/

public

abstract

class

pizzastore

public

abstract pizza createpizza(string type);

}/**北京的訂餐系統*/

public

class

beijingpizzastore

extends

pizzastore

return pizza;

}}/**西安訂餐系統*/

public

class

xianpizzastore

extends

pizzastore

return pizza;}}

測試main

public

class

main

}//結果

prepare beijing-style cheesepizza //北京訂餐系統得到的是北京的口味

結合**和上圖

4.依賴倒置原則(dependency inversion principle)

高層模組不應該依賴低層模組,二者都應該依賴其抽象;抽象不應該依賴細節;細節應該依賴抽象。結合我們的**,就是在工廠模式中讓pizzastore依賴抽象的pizza,各種具體的披薩類也依賴pizza

幾個指導方針幫助你遵循此原則:

5.抽象工廠模式 , 簡單工廠模式 , 工廠模式的區別

推薦部落格:

三者的區別:

簡單工廠 : 用來生產同一等級結構中的任意產品。(對於增加新的產品,無能為力)

工廠方法 :用來生產同一等級結構中的固定產品。(支援增加任意產品)

抽象工廠 :用來生產不同產品族的全部產品。(對於增加新的產品,無能為力;支援增加產品族)

抽象工廠和工廠方法的區別:

6.總結

1.所有的工廠都是用來封裝物件的建立

2.簡單工廠,雖然不是乙個真正的設計模式,但仍然是乙個簡單的方法,可以將客戶程式從具體類中解耦

3.工廠方法使用繼承,把物件的建立委託給子類,子類實現工廠方法建立物件

4.抽象工廠使用組合,物件的建立被實現在工廠介面所暴露的方法中

5.所以的工廠模式都通過減少應用程式和具體類之間的依賴促進松耦合

6.工廠是很有威力的技巧,幫助我們針對抽象程式設計,不對具體實現程式設計

設計模式 工廠模式 抽象工廠模式

建立物件時不會對客戶暴露建立邏輯,並且通過使用乙個共同的介面來指向建立的物件。sept1 建立乙個公共介面,將要對外開放的方法在這裡定義。sept2 建立實現介面的類,用即實現對外開放的類的方法 sept3 建立工廠,提供乙個get方法,這個方法提供返回實現類的物件 建立選擇 sept4 使用,建立...

設計模式 工廠設計模式

用於建立物件的介面,交給子類去實現 我們舉乙個生產nokia的例子 public abstract class nokiaphone先試定義了乙個抽象類,抽象出方法poweronphone 模擬手機開機的動作 public class nokia5200 extends nokiaphone pub...

設計模式 工廠設計模式

工廠模式分為工廠方法模式和抽象工廠模式 工廠方法模式分為 普通工廠模式,就是建立乙個工廠類,對實現了同一介面的一些類進行例項的建立。多個工廠方法模式,是對普通工廠方法模式的改進,在普通工廠方法模式中,如果傳遞的字串出錯,則不能正確建立物件,而多個工廠方法模式是提供多個工廠方法,分別建立物件。靜態工廠...