Python設計模式之抽象工廠模式原理與用法詳解
本文實例講述了Python設計模式之抽象工廠模式原理與用法。分享給大家供大家參考,具體如下:
抽象工廠模式(Abstract Factory Pattern):提供一個創(chuàng)建一系列相關或相互依賴對象的接口,而無需指定它們的類
下面是一個抽象工廠的demo:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'Andy'
"""
大話設計模式
設計模式——抽象工廠模式
抽象工廠模式(Abstract Factory Pattern):提供一個創(chuàng)建一系列相關或相互依賴對象的接口,而無需指定它們的類
"""
import sys
#抽象用戶表類
class User(object):
def get_user(self):
pass
def insert_user(self):
pass
#抽象部門表類
class Department(object):
def get_department(self):
pass
def insert_department(self):
pass
#操作具體User數(shù)據(jù)庫類-Mysql
class MysqlUser(User):
def get_user(self):
print 'MysqlUser get User'
def insert_user(self):
print 'MysqlUser insert User'
#操作具體Department數(shù)據(jù)庫類-Mysql
class MysqlDepartment(Department):
def get_department(self):
print 'MysqlDepartment get department'
def insert_department(self):
print 'MysqlDepartment insert department'
#操作具體User數(shù)據(jù)庫-Orcal
class OrcaleUser(User):
def get_user(self):
print 'OrcalUser get User'
def insert_user(self):
print 'OrcalUser insert User'
#操作具體Department數(shù)據(jù)庫類-Orcal
class OrcaleDepartment(Department):
def get_department(self):
print 'OrcalDepartment get department'
def insert_department(self):
print 'OrcalDepartment insert department'
#抽象工廠類
class AbstractFactory(object):
def create_user(self):
pass
def create_department(self):
pass
class MysqlFactory(AbstractFactory):
def create_user(self):
return MysqlUser()
def create_department(self):
return MysqlDepartment()
class OrcaleFactory(AbstractFactory):
def create_user(self):
return OrcaleUser()
def create_department(self):
return OrcaleDepartment()
if __name__ == "__main__":
db = sys.argv[1]
myfactory = ''
if db == 'Mysql':
myfactory = MysqlFactory()
elif db == 'Orcal':
myfactory = OrcaleFactory()
else:
print "不支持的數(shù)據(jù)庫類型"
exit(0)
user = myfactory.create_user()
department = myfactory.create_department()
user.insert_user()
user.get_user()
department.insert_department()
department.get_department()
上面類的設計如下圖:

優(yōu)點:
具體工廠類如MysqlFactory在一個應用中只需要初始化一次,這樣改動一個具體工廠變得很容易,只需要改變具體工廠就可以改變整個產(chǎn)品的配置。
具體的創(chuàng)建實例過程與客戶端分離,客戶端通過他們的抽象接口操縱實例,產(chǎn)品的具體類名也被具體工廠的實現(xiàn)分離,不會出現(xiàn)在客戶端代碼中
缺點:在新增一個具體工廠就需要增加多個類才能實現(xiàn)
更多關于Python相關內容可查看本站專題:《Python數(shù)據(jù)結構與算法教程》、《Python Socket編程技巧總結》、《Python函數(shù)使用技巧總結》、《Python字符串操作技巧匯總》及《Python入門與進階經(jīng)典教程》
希望本文所述對大家Python程序設計有所幫助。
相關文章
Python+Django+MySQL實現(xiàn)基于Web版的增刪改查的示例代碼
這篇文章主要介紹了Python+Django+MySQL實現(xiàn)基于Web版的增刪改查的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-05-05
詳解Open Folder as PyCharm Project怎么添加的方法
這篇文章主要介紹了詳解Open Folder as PyCharm Project怎么添加的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-12-12
Django提示mysql版本過低:django.db.utils.NotSupportedError: My
這篇文章主要介紹了Django提示mysql版本過低:django.db.utils.NotSupportedError: MySQL 8 or later is required (found 5.7.26).的解決方法,文中有詳細的解決方案,具有一定的參考價值,需要的朋友可以參考下2024-03-03

