国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python設計模式之抽象工廠模式原理與用法詳解

2020-02-16 00:40:49
字體:
供稿:網(wǎng)友

本文實例講述了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ù)庫類-Mysqlclass MysqlUser(User):  def get_user(self):    print 'MysqlUser get User'  def insert_user(self):    print 'MysqlUser insert User'#操作具體Department數(shù)據(jù)庫類-Mysqlclass MysqlDepartment(Department):  def get_department(self):    print 'MysqlDepartment get department'  def insert_department(self):    print 'MysqlDepartment insert department'#操作具體User數(shù)據(jù)庫-Orcalclass OrcaleUser(User):  def get_user(self):    print 'OrcalUser get User'  def insert_user(self):    print 'OrcalUser insert User'#操作具體Department數(shù)據(jù)庫類-Orcalclass 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):    passclass 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)

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 桂东县| 大港区| 如东县| 平泉县| 普陀区| 手游| 连云港市| 申扎县| 瑞丽市| 安国市| 晋中市| 恭城| 娱乐| 宁强县| 兖州市| 莱州市| 察隅县| 堆龙德庆县| 垫江县| 宜章县| 泸溪县| 应用必备| 临城县| 溧水县| 房产| 张家口市| 高平市| 防城港市| 南宁市| 余江县| 杨浦区| 都兰县| 陆川县| 英吉沙县| 华池县| 东乌珠穆沁旗| 晋城| 阿合奇县| 东乡| 昆明市| 涪陵区|