python 工廠模式
工廠模式:「工廠」即表示乙個負責建立其他型別的物件的類,通常情況下,乙個工廠的物件會有乙個或多個方法與之關聯,這些方法用於建立不同型別的物件,工廠物件會根據客戶端給方法傳遞的不同的引數返回不同的物件。
優點:物件的建立是可以根據需要單獨建立的,但是使用工廠模式來建立物件有以下優點:
工廠類:
factory_mode.py
#coding:utf-8
'''python 實現工廠類模式
'''import os
import sys
import glob
base_suffix = 'person'
module_suffix = '_' + base_suffix
module_suffix_extension = module_suffix + '.py'
class singleton(type):
def __new__(cls, name,bases,attrs):
print "run __new__() ...."
cls.__instance = none
return super(singleton,cls).__new__(cls,name,bases,attrs)
def __call__(self, *args, **kwargs):
print "run __call__() ..."
if self.__instance is none:
print "返回單例物件..."
self.__instance = super(singleton,self).__call__()
return self.__instance
class factory(object):
__meta_class__ = singleton
def __init__(self):
self.__portal_set = {}
self.init()
def init(self):
for pkg in glob.glob('*'+module_suffix_extension):
base_name = os.path.basename(pkg).split(module_suffix_extension)[0]
print base_name
module_name = base_name+module_suffix
module = __import__(module_name, fromlist=[module_name])
print "module:", module
portal_class = getattr(module, base_name)
self.__portal_set.setdefault(base_name, portal_class())
def get_data(self, data_portal_name, **kwargs):
portal_instance = self.__portal_set.get(data_portal_name, none)
if not portal_instance:
return false, 'no such portal'
return portal_instance.get_data(**kwargs)
if __name__ == '__main__':
#工廠類 根據 客戶端傳入的引數的不同,返回相應的資料
factory = factory()
kwargs =
#返回女士的資訊
data = factory.get_data("male", **kwargs)
print data
產品類:
person.py
from abc import abcmeta, abstractmethod
class person(object):
__metaclass__ = abcmeta
def __init__(self):
pass
@abstractmethod
def get_data(self):
pass
male_person.py
#coding:utf-8
from person import person
class male(person):
def __init__(self):
pass
def get_data(self,**kwargs):
print("hello mr.", kwargs)
return kwargs
femal_person.py
#coding:utf-8
from person import person
class female(person):
def __init__(self):
pass
def get_data(self, **kwargs):
print("hello mr.", kwargs)
return kwargs
python工廠模式 python實現工廠模式
我們有乙個基類person,包含方法get name和get gender 有兩個子類male 和female,建構函式可以打招呼。還有乙個工廠類。工廠類有乙個方法名get person有兩個輸入引數,名字和性別。使用者使用工廠類,通過呼叫get person方法。在程式執行期間,使用者通過性別傳遞...
工廠模式 PYTHON
工廠模式屬於建立模式列表類別。它提供了建立物件的最佳方法。在工廠模式中,建立物件時不會將邏輯公開給客戶端,並使用通用介面引用新建立的物件。工廠模式使用工廠方法在python中實現。當使用者呼叫乙個方法時,傳入乙個字串,並通過工廠方法實現建立乙個新物件,並將此物件作為返回值。工廠方法中使用的物件型別由...
python 工廠模式
內容 定義要給用於建立物件介面 工廠介面 讓子類決定例項化哪乙個產品類 角色 抽象工廠角色 creator 具體工廠角色 concrete creator 抽象產品角色 product 具體產品角色 concrete product 工廠 建立物件 1個工廠 生產乙個產品 每個產品有自己對應工廠就可...