python 工廠模式

2021-10-02 17:49:22 字數 2735 閱讀 4883

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個工廠 生產乙個產品 每個產品有自己對應工廠就可...