1. 程式人生 > >工廠模式(Factory Method)

工廠模式(Factory Method)

模式定義

定義一個用於建立物件的介面,讓子類決定例項化哪一個類。Factory Method使得一個類的例項化延遲(目的:解耦)到子類。

要點總結

Factory Method模式用於隔離類物件的使用者和具體型別之間的耦合關係。面對一個經常變化的具體型別

Factory Method模式通過面向物件的手法, 將所要建立的具體物件工作延遲到子類,從而實現一種擴充套件(而非改變)的策略,較好地解決了這種緊耦合關係

Factory Method模式解決‘單個物件’的需求變化。缺點在於要求建立方法/引數相同。

# 必大家一定見過類似於麥當勞自助點餐檯一類的點餐系統吧。在一個大
的觸控顯示屏上,有三類可以選擇的上餐品:漢堡等主餐、小食、飲料。當我們選擇好自己需要的食物,
支付完成後,訂單就生成了。下面,我們用今天的主角--工廠模式--來生成這些食物的邏輯主體。 首先,來看主餐的生成(僅以兩種漢堡為例)。 class Burger(): name="" price=0.0 def getPrice(self): return self.price def setPrice(self,price): self.price=price def getName(self): return self.name class cheeseBurger(Burger): def __init__(self): self.name="cheese burger" self.price=10.0 class spicyChickenBurger(Burger): def __init__(self): self.name="spicy chicken burger" self.price=15.0 class Snack(): name = "" price = 0.0 type = "SNACK" def getPrice(self): return self.price def setPrice(self, price): self.price = price def getName(self): return self.name class chips(Snack): def __init__(self): self.name = "chips" self.price = 6.0 class chickenWings(Snack): def __init__(self): self.name = "chicken wings" self.price = 12.0 class Beverage(): name = "" price = 0.0 type = "BEVERAGE" def getPrice(self): return self.price def setPrice(self, price): self.price = price def getName(self): return self.name class coke(Beverage): def __init__(self): self.name = "coke" self.price = 4.0 class milk(Beverage): def __init__(self): self.name = "milk" self.price = 5.0 # 以上的Burger,Snack,Beverage,都可以認為是該快餐店的產品,由於只提供了抽象方法,我們把它們叫抽象產品類,而cheese burger等6個由抽象產品類衍生出的子類,叫作具體產品類。 接下來,“工廠”就要出現了。 class foodFactory(): type="" def createFood(self,foodClass): print self.type," factory produce a instance." foodIns=foodClass() return foodIns class burgerFactory(foodFactory): def __init__(self): self.type="BURGER" class snackFactory(foodFactory): def __init__(self): self.type="SNACK" class beverageFactory(foodFactory): def __init__(self): self.type="BEVERAGE" # 同樣,foodFactory為抽象的工廠類,而burgerFactory,snackFactory,#beverageFactory為具體的工廠類。 # 在業務場景中,工廠模式是如何“生產”產品的呢? if __name__=="__main__": burger_factory=burgerFactory() snack_factorry=snackFactory() beverage_factory=beverageFactory() cheese_burger=burger_factory.createFood(cheeseBurger) print cheese_burger.getName(),cheese_burger.getPrice() chicken_wings=snack_factorry.createFood(chickenWings) print chicken_wings.getName(),chicken_wings.getPrice() coke_drink=beverage_factory.createFood(coke) print coke_drink.getName(),coke_drink.getPrice()

可見,業務中先生成了工廠,然後用工廠中的createFood方法和對應的引數直接生成產品例項。
列印結果如下:
BURGER factory produce a instance.
cheese burger 10.0
SNACK factory produce a instance.
chicken wings 12.0
BEVERAGE factory produce a instance.
coke 4.0