設計模式之工廠設計模式筆記

2021-10-04 19:22:28 字數 3255 閱讀 2249

定義

在基類中定義建立物件的乙個介面,讓子類決定例項化哪個類。工廠方法讓乙個類的的例項化延遲到子類中進行。

為什麼要用工廠模式?適用場景

需要建立的物件較少。

客戶端不關心物件的建立過程。

簡單工廠例項

public

abstract

class

animal

class

catextends

animal

}public

class

dogextends

animal

}

方法1:

public

class

animalfactory

public

static dog creatdog()

public

static cat creatcat()

}

方法2:

public

class

animalfactory

public

static animal getanimaltype

(string animal)

if(animal.

equalsignorecase

("cat"))

else

if(animal.

equalsignorecase

("dog"))

else

}}

以上兩種方式,如果我們新增產品類的話,需要修改工廠類中getanimaltype()方法,不符合「開放-封閉」原則

方法3:使用反射機制改善簡單工廠

public

class

animalfactory

public

static object getanimaltype

(class<

?extends

animal

> clazz)

catch

(instantiationexception e)

catch

(illegalacces***ception e)

catch

(classnotfoundexception e)

return obj;

}}

測試

public

class

test01

}

定義:每個物件都有乙個與之對應的工廠

適用場景

乙個類不知道它所需要的物件的類

在工廠方法模式中,客戶端不需要知道具體產品類的類名,只需要知道所對應的工廠即可,具體的產品物件由具體工廠類建立;客戶端需要指導具體產品的工廠類

乙個類通過其子類來指定建立哪個類

在工廠方法模式中,對於抽象工廠類只需要提供乙個建立產品的介面歐,而由其子類來確定具體要創鍵的物件,利用物件導向的多型性

將建立物件的任務委託給多個工廠子類中的某乙個,客戶端在使用時可以無需關心是哪乙個工廠子類建立產品子類,需要時再動態指定,可將具體工廠類的類名儲存在配置檔案或資料庫中。

角色分配

抽象工廠角色

是工廠方法的核心,與應用程式無關。任何在模式中建立的物件的工廠類必須實現這個介面。

具體工廠角色

這是實現抽象工廠介面的具體工廠類,包含與應用程式密切相關的邏輯,並且受到應用程式呼叫以建立某一種產品物件。

抽象產品角色

工廠方法模式所建立的物件的超型別,也就是產品物件的共同父類或共同擁有的介面。

具體產品角色

這個角色實現了抽象產品角色所定義的介面。某具體

產品有專門的具體工廠建立,它們之間往往一一對應。

工廠方法模式例項

public

inte***ce

factory

class

factorymethoddog

implements

factory

}public

class

factorymethodcat

implements

factory

}class

test

}

定義:

工廠類不單單可以建立一種產品,二是可以建立一組產品。

適用場景

客戶端不需要知道它所建立的的物件的類

需要一組物件共同完成某種功能時,並且可能存在多組物件完成不同功能的情況。(同屬於同乙個產品族的產品)

系統結構穩定,不會頻繁的增加物件(因為一旦增加就需要修改原有**,不符合開閉原則)

角色分配

抽象工廠和工廠方法中的工廠有什麼區別?

抽象工廠:生產一整套有產品的(至少要生產兩個產品),這些產品必須互相是有關係或有依賴。

工廠方法:工廠是生產單一產品的工廠。

抽象工廠模式例項

需求:生產akm的廠家需要生產槍和對應的子彈,生產m416的廠家需要生產槍和對應的子彈。

public

inte***ce

gunclass

m416gun

implements

gun}

class

akmgun

implements

gun}

public

inte***ce

bullet

class

m416bullet

implements

bullet

}class

akmbullet

implements

bullet

}

public

inte***ce

factory

class

m416

implements

factory

@override

public bullet getbullet()

}class

akmimplements

factory

@override

public bullet getbullet()

}

public

class

test

}

設計模式筆記之工廠模式

概念 工廠模式屬於建立型模式。定義乙個建立物件的介面,讓其子類自己決定例項化哪乙個工廠類,工廠模式使其建立過程延遲到子類進行。示例 定義乙個介面 public inte ce shape 介面的第乙個實現類 public class rectangle implements shape 介面的第二個...

設計模式 設計模式之工廠模式

工廠方法模式 建立模式 使用場景?作用?形態?場景 大量類似的實體類 要建立的實體類都是同一本質的東西 披薩 有部分類似功能 準備 烘烤 切法 實現方式不一樣 準備的材料不同 烘烤時間不同 切法不同 將繁瑣複雜的建立類的過程聚集在一起,有序清晰 把具體例項化的過程從客戶 中抽離 作用 1 將建立物件...

設計模式學習筆記之工廠模式

本文講述乙個披薩的誕生 我有一家披薩店,顧客來點了想吃的品種,然後我要準備材料 烘烤 剪下 幫顧客打包。這個過程用 怎麼實現呢?首先定義好準備 烘烤 剪下和打包這些動作 public abstract class pizza public void cut public void box publi...