抽象工廠模式(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 抽象工廠模式定義