大話設計模式Python實現- 抽象工廠模式


抽象工廠模式(Abstract Factory Pattern):提供一個創建一系列相關或相互依賴對象的接口,而無需指定它們的類

下面是一個抽象工廠的demo:

  1 #!/usr/bin/env python
  2 # -*- coding:utf-8 -*-
  3 
  4 __author__ = 'Andy'
  5 """
  6 大話設計模式
  7 設計模式——抽象工廠模式
  8 抽象工廠模式(Abstract Factory Pattern):提供一個創建一系列相關或相互依賴對象的接口,而無需指定它們的類
  9 """
 10 import sys
 11 
 12 #抽象用戶表類
 13 class User(object):
 14 
 15     def get_user(self):
 16         pass
 17 
 18     def insert_user(self):
 19         pass
 20 
 21 #抽象部門表類
 22 class Department(object):
 23 
 24     def get_department(self):
 25         pass
 26 
 27     def insert_department(self):
 28         pass
 29 
 30 
 31 #操作具體User數據庫類-Mysql
 32 class MysqlUser(User):
 33 
 34     def get_user(self):
 35         print 'MysqlUser get User'
 36 
 37     def insert_user(self):
 38         print 'MysqlUser insert User'
 39 
 40 #操作具體Department數據庫類-Mysql
 41 class MysqlDepartment(Department):
 42 
 43     def get_department(self):
 44         print 'MysqlDepartment get department'
 45 
 46     def insert_department(self):
 47         print 'MysqlDepartment insert department'
 48 
 49 #操作具體User數據庫-Orcal
 50 class OrcaleUser(User):
 51 
 52     def get_user(self):
 53         print 'OrcalUser get User'
 54 
 55     def insert_user(self):
 56         print 'OrcalUser insert User'
 57 
 58 #操作具體Department數據庫類-Orcal
 59 class OrcaleDepartment(Department):
 60 
 61     def get_department(self):
 62         print 'OrcalDepartment get department'
 63 
 64     def insert_department(self):
 65         print 'OrcalDepartment insert department'
 66 
 67 #抽象工廠類
 68 class AbstractFactory(object):
 69 
 70     def create_user(self):
 71         pass
 72 
 73     def create_department(self):
 74         pass
 75 
 76 class MysqlFactory(AbstractFactory):
 77 
 78     def create_user(self):
 79         return MysqlUser()
 80 
 81     def create_department(self):
 82         return MysqlDepartment()
 83 
 84 class OrcaleFactory(AbstractFactory):
 85 
 86     def create_user(self):
 87         return OrcalUser()
 88 
 89     def create_department(self):
 90         return OrcalDepartment()
 91 
 92 if __name__ == "__main__":
 93 
 94     db = sys.argv[1]
 95     myfactory = ''
 96     if db == 'Mysql':
 97         myfactory = MysqlFactory()
 98     elif db == 'Orcal':
 99         myfactory = OrcaleFactory()
100     else:
101         print "不支持的數據庫類型"
102         exit(0)
103     user = myfactory.create_user()
104     department = myfactory.create_department()
105     user.insert_user()
106     user.get_user()
107     department.insert_department()
108     department.get_department()

上面類的設計如下圖:

優點:

     具體工廠類如MysqlFactory在一個應用中只需要初始化一次,這樣改動一個具體工廠變得很容易,只需要改變具體工廠就可以改變整個產品的配置。

     具體的創建實例過程與客戶端分離,客戶端通過他們的抽象接口操縱實例,產品的具體類名也被具體工廠的實現分離,不會出現在客戶端代碼中

缺點:在新增一個具體工廠就需要增加多個類才能實現

 

 


作者:Andy
出處:http://www.cnblogs.com/onepiece-andy/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM