Python設(shè)計(jì)模式之抽象工廠模式原理與用法詳解
本文實(shí)例講述了Python設(shè)計(jì)模式之抽象工廠模式原理與用法。分享給大家供大家參考,具體如下:
抽象工廠模式(Abstract Factory Pattern):提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口,而無需指定它們的類
下面是一個(gè)抽象工廠的demo:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'Andy'
"""
大話設(shè)計(jì)模式
設(shè)計(jì)模式——抽象工廠模式
抽象工廠模式(Abstract Factory Pattern):提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口,而無需指定它們的類
"""
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()
上面類的設(shè)計(jì)如下圖:

優(yōu)點(diǎn):
具體工廠類如MysqlFactory在一個(gè)應(yīng)用中只需要初始化一次,這樣改動(dòng)一個(gè)具體工廠變得很容易,只需要改變具體工廠就可以改變整個(gè)產(chǎn)品的配置。
具體的創(chuàng)建實(shí)例過程與客戶端分離,客戶端通過他們的抽象接口操縱實(shí)例,產(chǎn)品的具體類名也被具體工廠的實(shí)現(xiàn)分離,不會(huì)出現(xiàn)在客戶端代碼中
缺點(diǎn):在新增一個(gè)具體工廠就需要增加多個(gè)類才能實(shí)現(xiàn)
更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進(jìn)階經(jīng)典教程》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
Python+Django+MySQL實(shí)現(xiàn)基于Web版的增刪改查的示例代碼
這篇文章主要介紹了Python+Django+MySQL實(shí)現(xiàn)基于Web版的增刪改查的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05
python3注冊(cè)全局熱鍵的實(shí)現(xiàn)
這篇文章主要介紹了python3注冊(cè)全局熱鍵的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
詳解Open Folder as PyCharm Project怎么添加的方法
這篇文章主要介紹了詳解Open Folder as PyCharm Project怎么添加的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
python實(shí)現(xiàn)批量nii文件轉(zhuǎn)換為png圖像
這篇文章主要介紹了python實(shí)現(xiàn)批量nii文件轉(zhuǎn)換為png圖像,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
Python實(shí)現(xiàn)打印實(shí)心和空心菱形
今天小編就為大家分享一篇Python實(shí)現(xiàn)打印實(shí)心和空心菱形,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-11-11
在Python中定義函數(shù)并調(diào)用的操作步驟
這篇文章主要介紹了在Python中如何定義函數(shù)并調(diào)用它,函數(shù)的定義和調(diào)用是Python編程中最基本也是最重要的概念之一,掌握它們對(duì)于進(jìn)行有效的Python編程至關(guān)重要,需要的朋友可以參考下2024-01-01
Django提示mysql版本過低:django.db.utils.NotSupportedError: My
這篇文章主要介紹了Django提示mysql版本過低:django.db.utils.NotSupportedError: MySQL 8 or later is required (found 5.7.26).的解決方法,文中有詳細(xì)的解決方案,具有一定的參考價(jià)值,需要的朋友可以參考下2024-03-03

