工廠方法模式(Factory Method Pattern):定義一個用於創建對象的接口,讓子類決定實例化哪一個類,工廠方法使一個類的實例化延時到其子類.
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 4 __author__ = 'Andy' 5 6 """ 7 大話設計模式 8 設計模式——工廠方法模式 9 工廠方法模式(Factory Method Pattern):定義一個用於創建對象的接口,讓子類決定實例化哪一個類,工廠方法使一個類的實例化延時到其子類. 10 工廠方法模式克服了簡單工廠模式違背開放-封閉原則的缺點,又保持了封裝對象創建過程的優點 11 場景:雷鋒工廠,不關心執行者,只關心執行結果 12 """ 13 14 class LeiFeng(object): 15 16 def Sweep(self): 17 print "掃地" 18 19 def Wash(self): 20 print "洗衣" 21 22 def BuyRice(self): 23 print "買米" 24 25 26 class IFactory(LeiFeng): 27 28 def CreateLeiFeng(self): 29 pass 30 31 #大學生 32 class Undergraduate(LeiFeng): 33 pass 34 35 #新增社區服務者 36 class Volunteer(LeiFeng): 37 pass 38 39 # 學習雷鋒的大學生工廠 40 class UndergraduateFactory(IFactory): 41 42 def CreateLeiFeng(self): 43 return Undergraduate() 44 45 #新增一個社區服務者的工廠e 46 class VolunteerFactory(IFactory): 47 48 def CreateLeiFeng(self): 49 return Volunteer() 50 51 52 if __name__ == "__main__": 53 student = UndergraduateFactory() 54 volunteer = VolunteerFactory() 55 student.BuyRice() 56 student.Sweep() 57 volunteer.Wash()
上面類的設計如下圖:
創建一個抽象工廠類CreateLeiFeng和一個抽象對象類LeiFeng,當創建具體leifeng對象-Undergradiate去dosomething時,使用繼承抽象工廠的UndergraduateFactory工廠類,該類返回一個Undergradiate實例,如果還要去做另一個dosomething時,再創建一個VolunteerFactory工廠方法創建創建一個Volunteer實例就可以了
作者:Andy
出處:http://www.cnblogs.com/onepiece-andy/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。