簡述設計模式(二) 工廠方法和抽象工廠模式

2021-10-05 16:02:54 字數 3204 閱讀 6982

簡單工廠模式是由乙個工廠物件決定建立哪一種產品類的例項。使用工廠類封裝了建立產品類例項物件的行為,使用者只需告訴工廠類獲取哪個例項,工廠類建立並返回使用者所需的例項。

//產品介面

public

inte***ce

fruit

//產品1

public

class

implements

fruit

}//產品2

public

class

banana

implements

fruit

}//產品工廠類

public

class

fruitfactory

}}

優點工廠類封裝建立物件的行為,使用者不需要知道實現類;

解耦;

缺點:如果增加新產品類時,需要修改工廠類,違背「開閉原則」。

如果產品類不多,使用乙個工廠類可以完成工作;但如果需要擴充套件乙個新的產品類,使用簡單工廠應該如何解決?

如果建立新的產品類,然後將例項化物件的行為新增到原來的工廠類中。這種方式違反了「開閉原則」——當我們擴充套件程式時,不應修改原有的類、模組或函式,而是通過擴充套件進行實現。

工廠方法是簡單工廠的進一步擴充套件。所以,在簡單工廠模式的基礎上,新增乙個工廠介面或工廠抽象類,其定義了獲取產品類的抽象方法,將建立產品的具體實現延遲到工廠子類中實現。這樣,當需要擴充套件新的產品類,不需要在原工廠類中修改,而是擴充套件新的工廠類來實現產品類的建立。

//工廠介面

public

inte***ce

factory

//工廠實現1

public

class

fruitfactory

implements

factory}}

//工廠實現2

public

class

newfruitfactory

implements

factory

return null;}}

//產品介面

public

inte***ce

fruit

//產品1

public

class

implements

fruit

}//產品2

public

class

banana

implements

fruit

}//產品3

public

class

orange

implements

fruit

}

抽象工廠模式是工廠方法模式的公升級版本,工廠方法模式只生產乙個等級的產品,而抽象工廠模式可生產多個等級的產品。使用抽象工廠模式一般要滿足以下條件。

舉個例子,比如電子產品有不同的品牌(如華為、iphone;乙個品牌對應乙個產品族),不同品牌各自擁有電腦、手機產品。使用工廠方法模式,乙個工廠物件只能生產一種等級的產品(電腦或手機);使用抽象工廠模式,乙個工廠物件可以生產多種產品(電腦和手機)。下面使用圖例說明

抽象工廠模式除了具有工廠方法模式的優點外,其他主要優點如下。

缺點是:當產品族中需要增加乙個新的產品時,所有的工廠類都需要進行修改,不滿足開閉原則。

抽象工廠介面、具體工廠類

//抽象工廠介面

public

inte***ce

abstractfactory

//產品簇1工廠類

public

class

huaweifactory

implements

abstractfactory

return null;

}@override

public huawei getcomputer

(string type)

return null;}}

//產品簇2工廠類

public

class

iphonefactory

implements

abstractfactory

return null;

}@override

public iphone getcomputer

(string type)

return null;

}}

產品簇1

public

inte***ce

huawei

public

class

p40implements

huawei

}public

class

matebook

implements

huawei

}

產品簇2

public

inte***ce

iphone

public

class

iphonexr

implements

iphone

}public

class

ipad

implements

iphone

}

工廠模式的意義將例項化物件的**提取出來,放到乙個類中同一管理和維護,達到和主專案的依賴關係的解耦,從而提高專案的擴充套件和維護性;

設計模式 抽象工廠方法和工廠方法

工廠方法模式定義了乙個建立物件的介面,但由子類決定要例項化的類是哪乙個。工廠方法讓類把例項化推遲到子類。抽象工廠模式提供乙個介面,用於建立相關或依賴物件的家族,而不需要明確指定具體類。從pizzastore的角度,來理解上面的這個類圖 抽象工廠的任務是,定義乙個建立一組產品的介面。這個介面內的每個方...

設計模式(二)工廠方法模式 抽象工廠模式

工廠方法模式與簡單工廠模式的區別在於 簡單工廠模式用單一工廠來生產所有同種類的產品,而工廠模式是用對應的工廠來生產同一種類的不同產品。對於工廠方法模式而言,其簡單模型的uml為 工廠方法模式的定義 定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使乙個類的例項化延遲到工廠抽象類的子類。...

設計模式 簡單工廠 工廠方法 抽象工廠方法模式

簡介 工廠方法模式分為 簡單工廠模式 工廠方法模式 抽象工廠方法模式 簡單工廠模式是屬於建立型模式,又叫做靜態工廠方法 static factory method 模式,但不屬於23種gof設計模式之一。簡單工廠模式是由乙個工廠物件決定建立出哪一種產品類的實 uml圖示例 public class ...