設計模式之:工廠模式
阿新 • • 發佈:2018-12-25
目錄
工廠設計模式的實現是一個不屬於任何類的單一函式,負責單一種類物件的建立。
一. 簡單工廠模式
本質
給一個函式傳遞不同的引數,生成不同的物件
優點
- 隱藏了實現細節;
- 呼叫者不需要修改
缺點
違反了開閉原則,當新增物件型別時必須修改工廠函式程式碼
程式碼示例:
'''簡單工廠模式''' class ChinaGetter: def __init__(self): self.trans = dict(dog='狗狗',cat = "貓咪") def get(self,m): try: return self.trans[m] except KeyError: return str(m) class EnglishGetter(): def get(self,m): return str(m) def get_localizer(language="English"): '''工廠方法''' if language=="English": return EnglishGetter() elif language=="China": return ChinaGetter() else: return EnglishGetter() e,c = get_localizer(),get_localizer('China') for msgid in "dog parrot cat bear".split(): print(e.get(msgid), c.get(msgid))
二.抽象工廠模式
本質
給一個工廠類,設定工廠類中的變數為某個具體的工廠類例項,通過此方式實現不同例項的建立
優點
- 每個具體產品都對應一個具體工廠類,不需要修改工廠類程式碼
- 隱藏了實現細節
缺點
- 每增加一個類就需要增加相應的工廠類
程式碼示例
class PetShop(): '''a pet shop''' def __init__(self,animal_factory=None): '''抽象工廠''' self.pet_factory = animal_factory def show_pet(self): '''建立寵物並顯示''' pet = self.pet_factory.get_pet() print('This is a lovely',str(pet)) print('It say',pet.speak()) print('It eats',self.pet_factory.get_food()) class Dog(): def speak(self): return 'woof' def __str__(self): return 'Dog' class Cat(): def speak(self): return 'miaomiao' def __str__(self): return 'Cat' class DogFactory(): '''狗工廠''' def get_pet(self): return Dog() def get_food(self): return 'Dog food' class CatFactory(): '''貓工廠''' def get_pet(self): return Cat() def get_food(self): return 'Cat food' def get_factory(className): '''根據傳入的類物件生成相應的例項''' return className() if __name__ == "__main__": f1 = get_factory(DogFactory) shop = PetShop(f1) shop.show_pet() f2 = get_factory(CatFactory) shop = PetShop(f2) shop.show_pet()
三.參考連線:
http://www.pythonav.com/xiaofeng/4.html#_label3_4
https://www.jianshu.com/p/42f6cbd29e76