Python實現工廠模式的兩個例子
設計模式在Java裡面這個是必須的中高階內容。而很少看到Python裡面刻意去講這個,關於Python實現的設計模式,一直以來是自己比較好奇而且想深入學習的一個點。
需要吐槽的是自己買了本紙質書,按照書名是可以精通Python設計模式了,裡面有流程圖,有程式碼,部分還有例子和執行結果。但是自己看起來總是感覺有些吃力,不是完全技術層面的困難,而是理解上的困難。
而換個思路,看看國內的一些朋友寫的一些設計模式的總結,一看就懂。我都納悶是不是文化上的差異導致的。
這個比較清晰。可以關注下。
這個的star都超過14000個了。
我們先來簡單看下工廠模式
如下是工廠方法的實現,裡面用到了字典來做鍵值的對映。
#!/usr/bin/python # coding:utf8 ''' Factory Method ''' class ChinaGetter: """A simple localizer a la gettext""" def __init__(self): self.trans = dict(jianrong=u"楊建榮", jianrong_notes=u"學習筆記") def get(self, msgid): """We'll punt if we don't have a translation""" try: return self.trans[msgid] except KeyError: return str(msgid) class EnglishGetter: """Simply echoes the msg ids""" def __init__(self): self.trans = dict(jeanron100=u"jeanron100...", mysql=u"MySQL", oracle=u"Oracle") def get(self, msgid): try: return self.trans[msgid] except KeyError: return str(msgid) def get_localizer(language="English"): """The factory method""" languages = dict(English=EnglishGetter, China=ChinaGetter) return languages[language]() # Create our localizers e, g = get_localizer("English"), get_localizer("China") # Localize some text for msgid in "jeanron100 jianrong mysql oracle".split(): print(e.get(msgid), g.get(msgid))
執行結果如下:
(u'jeanron100...', 'jeanron100')
('jianrong', u'\u6768\u5efa\u8363')
(u'MySQL', 'mysql')
(u'Oracle', 'oracle')
而使用抽象工廠,使用了random來做一個動態匹配。這個例子參考了開篇的第一個連結的例子,裡面的getFactory方法會隨機得到一個工廠的例項化物件,而對於應用來說這個匹配的過程是透明的。
#!/usr/bin/python # coding:utf8 ''' Abstract Factory ''' import random class PetShop: """A pet shop""" def __init__(self, animal_factory=None): """pet_factory is our abstract factory. We can set it at will.""" self.pet_factory = animal_factory def show_pet(self): """Creates and shows a pet using the abstract factory""" pet = self.pet_factory.get_pet() print("This is a lovely", str(pet)) print("It says", pet.speak()) print("It eats", self.pet_factory.get_food()) # Stuff that our factory makes class Dog: def speak(self): return "woof" def __str__(self): return "Dog" class Cat: def speak(self): return "meow" def __str__(self): return "Cat" # Factory classes 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" # Create the proper family def get_factory(): """Let's be dynamic!""" return random.choice([DogFactory, CatFactory])() # Show pets with various factories if __name__ == "__main__": shop = PetShop() for i in range(3): shop.pet_factory = get_factory() shop.show_pet() print("=" * 20) #print random.choice([1,2,3,4,5])
執行結果如下:
('This is a lovely', 'Cat')
('It says', 'meow')
('It eats', 'cat food')
====================
('This is a lovely', 'Cat')
('It says', 'meow')
('It eats', 'cat food')
====================
('This is a lovely', 'Dog')
('It says', 'woof')
('It eats', 'dog food')
====================
有了這些鋪墊,對於Python設計模式的實現就有了一個初步的認識和理解,後續做一些改進就可以循序漸進了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-2152384/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python 實現工廠模式、抽象工廠,單例模式Python模式抽象單例
- 用Python實現設計模式——工廠模式Python設計模式
- Java實現工廠模式Java模式
- php實現抽象工廠模式PHP抽象模式
- 【Python設計模式】03 工廠模式:建立建立物件的工廠Python設計模式物件
- 【Python】抽象工廠模式Python抽象模式
- Go 實現常用設計模式(六)工廠模式Go設計模式
- python設計模式之工廠模式Python設計模式
- python設計模式-工廠方法模式Python設計模式
- 設計模式-C#實現簡單工廠模式設計模式C#
- 簡單工廠模式、工廠模式、抽象工廠模式比較模式抽象
- 設計模式之工廠模式!深入解析簡單工廠模式,工廠方法模式和抽象工廠模式設計模式抽象
- 一篇搞定工廠模式【簡單工廠、工廠方法模式、抽象工廠模式】模式抽象
- 設計模式-簡單工廠、工廠方法模式、抽象工廠模式設計模式抽象
- 工廠模式之簡單工廠模式模式
- C# 設計模式(1)——簡單工廠模式、工廠模式、抽象工廠模式C#設計模式抽象
- 設計模式-工廠模式二(工廠方法模式)設計模式
- 簡單工廠模式和抽象工廠模式模式抽象
- 工廠模式(簡單工廠模式)快速理解模式
- 簡單工廠模式(simple factory)及程式碼實現模式
- 1、簡單工廠模式實現計算器功能模式
- 簡單工廠模式、工廠方法模式和抽象工廠模式有何區別?模式抽象
- 工廠模式模式
- 建立型:工廠模式-工廠方法、抽象工廠模式抽象
- 設計模式學習(二)工廠模式——抽象工廠模式設計模式抽象
- 【Java】簡單工廠模式、工廠模式、介面卡模式Java模式
- JavaScript設計模式與實踐–工廠模式JavaScript設計模式
- JavaScript設計模式與實踐--工廠模式JavaScript設計模式
- python開發中常用的設計模式(簡單工廠模式)Python設計模式
- 設計模式——抽象工廠實驗設計模式抽象
- Java 設計模式之工廠方法模式與抽象工廠模式Java設計模式抽象
- 設計模式-建立型模式-工廠模式(工廠三兄弟) TypeScript設計模式TypeScript
- 工廠模式的函式模式函式
- Python:兩個使用單例模式的方法Python單例模式
- 建立型:工廠模式-簡單工廠模式
- 工廠方法模式模式
- 抽象工廠模式抽象模式
- golang 工廠模式Golang模式