1. 程式人生 > >抽象工廠模式(python版)

抽象工廠模式(python版)

抽象工廠模式提供一個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。
優點:易於交換“產品系列”,只要更改相應的工廠即可。
缺點:建立產品的時候很繁瑣,需要增加和修改很多東西。

優化1:為了避免客戶端有過多的邏輯判斷,可以封裝出一個簡單工廠類來生成產品類。
優化2:為了減少簡單工廠類裡面的邏輯判斷,可以採用“反射”機制,直接根據外部的配置檔案讀取出需要使用產品類的資訊。
#encoding=utf-8
#
#by panda
#抽象工廠模式


def printInfo(info):
    print unicode(info, 'utf-8').encode('gbk')
    
#抽象產品A:user表
class IUser():
    def Insert(self):
        pass
    def GetUser(self):
        pass

#sqlserver實現的User
class SqlserverUser(IUser):
    def Insert(self):
        printInfo("在SQL Server中給User表增加一條記錄")
    def GetUser(self):
        printInfo("在SQL Server中得到User表的一條記錄")

#Access實現的User
class AccessUser(IUser):
    def Insert(self):
        printInfo("在Access中給User表增加一條記錄")
    def GetUser(self):
        printInfo("在Access中得到User表一條記錄")


#抽象產品B:部門表
class IDepartment():
    def Insert(self):
        pass
    def GetUser(self):
        pass

#sqlserver實現的Department
class SqlserverDepartment(IUser):
    def Insert(self):
        printInfo("在SQL Server中給Department表增加一條記錄")
    def GetUser(self):
        printInfo("在SQL Server中得到Department表的一條記錄")

#Access實現的Department
class AccessDepartment(IUser):
    def Insert(self):
        printInfo("在Access中給Department表增加一條記錄")
    def GetUser(self):
        printInfo("在Access中得到Department表一條記錄")


#抽象工廠
class IFactory():
    def CreateUser(self):
        pass
    def CreateDepartment(self):
        pass    

#sql server工廠
class SqlServerFactory(IFactory):
    def CreateUser(self):
        return SqlserverUser()
    def CreateDepartment(self):
        return SqlserverDepartment()

#access工廠
class AccessFactory(IFactory):
    def CreateUser(self):
        return AccessUser()
    def CreateDepartment(self):
        return AccessDepartment()
    
#優化一:採用一個簡單工廠類,封裝邏輯判斷操作
class DataAccess():
#    db = "Sqlserver"
    db = "Access"
    @staticmethod
    def CreateUser():
        if (DataAccess.db == "Sqlserver"):
            return SqlserverUser()
        elif(DataAccess.db == "Access"):
            return AccessUser()
    @staticmethod
    def CreateDepartment():
        if (DataAccess.db == "Sqlserver"):
            return SqlserverDepartment()
        elif(DataAccess.db == "Access"):
            return AccessDepartment()
        
#優化二:採用反射機制,避免使用太多判斷
##以下資訊可以從配置檔案中獲取
DBType = 'Sqlserver' #'Access'
DBTab_User = 'User'
DBTab_Department = 'Department'

class DataAccessPro():
#    db = "Sqlserver"
    db = "Access"
    @staticmethod
    def CreateUser():
        funName = DBType + DBTab_User
        return eval(funName)()  #eval 將其中的字串轉化為python表示式
    @staticmethod
    def CreateDepartment():
        funName = DBType + DBTab_Department
        return eval(funName)()
        
def clientUI():
    printInfo("\n--------抽象工廠方法--------")
    factory = SqlServerFactory()
    iu = factory.CreateUser()
    iu.Insert()
    iu.GetUser()
    id = factory.CreateDepartment()
    id.Insert()
    id.GetUser()
    
    printInfo("\n--抽象工廠方法+簡單工廠方法--")
    iu = DataAccess.CreateUser()
    iu.Insert()
    iu.GetUser()
    id = DataAccess.CreateDepartment()
    id.Insert()
    id.GetUser()
    
    printInfo("\n-抽象工廠方法+簡單工廠方法+反射-")
    iu = DataAccessPro.CreateUser()
    iu.Insert()
    iu.GetUser()
    id = DataAccessPro.CreateDepartment()
    id.Insert()
    id.GetUser()    
    return


if __name__ == '__main__':
    clientUI();

類圖


相關推薦

抽象工廠模式(python)

抽象工廠模式:提供一個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。優點:易於交換“產品系列”,只要更改相應的工廠即可。缺點:建立產品的時候很繁瑣,需要增加和修改很多東西。優化1:為了避免客戶端有過多的邏輯判斷,可以封裝出一個簡單工廠類來生成產品類。優化2:為

抽象工廠模式(Java與Kotlin

class das list 新的 ges extends 知識 簡單工廠 所有 前文推送 設計模式 簡單工廠模式(Java與Kotlin版) 工廠方法模式(Java與Kotlin版) Kotlin基礎知識 Kotlin入門第一課:從對比Java開始

抽象工廠模式 - 設計模式 - PHP

ret white elf class 參考 工廠 bsp echo 抽象 1 <?php 2 /* 3 * 抽象工廠模式 4 * 5 * 參考:http://blog.csdn.net/zhaoxuejie/article/detail

[Python設計模式] 第15章 如何兼容各種DB——抽象工廠模式

for from code trac 抽象接口 pass 工廠 https reat github地址:https://github.com/cheesezh/python_design_patterns 題目 如何讓一個程序,可以靈活替換數據庫? 基礎版本 class U

一文詳解“抽象工廠模式”以及python語言的實現

一、什麼是“抽象工廠模式”——Abstract Factory Pattern 其實所謂的抽象工廠模式,是在前面講解過的“簡單工廠模式”、“工廠方法模式”的基礎之上進行擴充的。回憶前面的這兩種模式,我們可以得出: 工廠模式:針對一個系列的類(比如Circle、Rectangl

設計模式 c++(5)——抽象工廠模式

定義:為建立一組相關或相互依賴的物件提供一個介面,而且無需指定它們的具體類 示例一:女媧造人擴充套件 造出來黑、白、黃種人,分別有性別分類 類圖說明:一個介面,多個抽象類,N個實現類,每個人種都是一個抽象類,性別是在各個實現類中實現的。 1. 結構說明: HumanF

設計模式抽象工廠模式Python

抽象工廠模式(Abstract Factory Pattern): 提供一個介面,用於建立相關或依賴物件的家族,而不需要明確指定具體類。 原則: 依賴抽象,不要依賴具體類。 案例: 還是“工廠方法模式”中的例子,但是換一種方式來解決: 因為口味的不同是原材料的不同造成的,

Python抽象工廠模式

抽象工廠模式,一個抽象工廠可以生產同一系列的多個型號產品例項。 class TypeB(object): def __init__(self): pass class

Python的建立型設計模式抽象工廠模式

注:書上定義和展示程式碼均來自《Python程式設計實戰》 抽象工廠模式,書上定義:用來建立複雜的物件,這種物件由許多小的物件組成,而這些小的物件都屬於特定的“系列”。回頭再讀這段話,然後再回想敲過書上的這個例項。 用簡單話來概括就是,你現在要完成一個東西,這個東西里面有

Python抽象工廠模式

# 前言 接著上一篇的故事[工廠模式](https://www.cnblogs.com/leetao94/p/13277517.html)繼續,手機要出廠,顯然光一個手機肯定是不行的,還需要包裝盒、充電器等等東西。我們按照上一篇提到的工廠模式,去建立新的工廠是一點都沒有問題的。但是思考一下這樣子做會帶來的問

設計模式——抽象工廠模式(C++實現)

concrete out png return style bsp ctp img using 1 #include <iostream> 2 #include <string> 3 4 usin

【轉載】設計模式_抽象工廠模式

ron mage ges 定義 ima cnblogs 工廠 一個 相互 定義:為創建一組相關或相互依賴的對象提供一個接口,而且無需指定他們的具體類。 是工廠方法的擴展。    【轉載】設計模式_抽象工廠模式

設計模式抽象工廠模式

elm 步驟 cli 優點 abstract 工程師 face abs ges 場景問題 舉個生活中常見的例子——組裝電腦,我們在組裝電腦的時候,通常需要選擇一系列的配件,比如CPU、硬盤、內存、主板、電源、機箱等。 需要整體考慮各個配件之間的兼容性。比如:CPU和主板,如

Note8:C#設計模式工廠方法模式(VS 簡單工廠模式 & 抽象工廠模式

工廠方法模式 blog 抽象工廠 nbsp strong str cnblogs note 設計 一、資源說明 (1)本文有參考:http://www.cnblogs.com/zhili/p/FactoryMethod.html 待更!Note8:C#設計模式—工廠方法

設計模式筆記10: 抽象工廠模式

alt 模式 我們 apps 子類 工廠 相互 依賴對象 img 1.1  定義   提供一個創建一系列相關或相互依賴對象的接口,而無需指定他們具體的類。

c++ 設計模式9 (Abstract Factory 抽象工廠模式

構建 數據庫 strac 無需 div exec oracl dfa tle 5.2 抽象工廠模式 動機:在軟件系統中,經常面臨著“一系列相互依賴的對象”的創建工作;同時,由於需求的變化,往往存在更多系列對象的創建工作。 代碼示例: 實現利用數據庫的業務邏輯,支持多數據

工廠模式抽象工廠模式

關聯關系 芯片組 abs con 通過 新增 相似性 依賴 rda 圖顯示有問題。可直接看: 點擊打開鏈接 場景問題   舉個生活中常見的樣例——組裝電腦,我們在組裝電腦的時候。通常須要選擇一系列的配件,比方CPU、硬盤、內存、主板、電源、機箱等。為討論使用簡單點,僅

iOS經常使用設計模式——工廠方法(簡單工廠模式工廠方法模式抽象工廠模式

csdn bst 設計 cto mod 基類 load 引用 角色 1. 簡單工廠模式 怎樣理解簡單工廠,工廠方法。 抽象工廠三種設計模式? 簡單工廠的生活場景。賣早點的小攤販。他給你提供包子,饅頭,地溝油烙的煎餅等,小販是一個工廠。它生產包子,饅頭,地溝油烙的

AbstractFactory(抽象工廠模式)

fun class nts stat except pre face exception stp AbstractFactory(抽象工廠模式)   有些情況下我們需要根據不同的選擇邏輯提供不同的構造工廠,而對於多個工廠而言需要一個統一的抽象 <?php

設計模式(3)抽象工廠模式(Abstract Factory)

開始 line andro 依賴 red 單例 clas 面向接口 抽象工廠方法 設計模式(0)簡單工廠模式 設計模式(1)單例模式(Singleton) 設計模式(2)工廠方法模式(Factory Method) 源碼地址 0 抽象工廠模式簡介 0.0 抽象工廠模式定義