如何将单例和工厂设计模式与 python 相结合?
how to combine singleton and factory design pattern with python?
假设有几家出版社,每家出版了多本书
我将处理许多记录,例如 'press name, book name'
我想通过唯一的名称(字符串)创建 class 'Press',但只有不同的字符串才能生成 class 'Press'.[=11 的不同实例=]
所以,我需要一个像 'factory' 一样的 class,当一条记录包含一个新的印刷机时创建一个新实例,但如果已经存在具有相同的印刷机,它也可以作为单例工作名字。
您可以创建一个字典,将唯一名称作为键,将 Press 对象作为值。这不需要是一个全球性的命令。你可以像这样用 class 包裹它:
class Press:
def __init__(self, name):
self.name = name
self.books = []
class PressManager:
presses = {}
@classmethod
def get_press(cls, name):
if name not in cls.presses:
cls.presses[name] = Press(name)
return cls.presses[name]
example_press = PressManager.get_press("Test")
我将 get_press()
实现为 class 方法,因为我认为这就是您的想法。
假设有几家出版社,每家出版了多本书 我将处理许多记录,例如 'press name, book name'
我想通过唯一的名称(字符串)创建 class 'Press',但只有不同的字符串才能生成 class 'Press'.[=11 的不同实例=]
所以,我需要一个像 'factory' 一样的 class,当一条记录包含一个新的印刷机时创建一个新实例,但如果已经存在具有相同的印刷机,它也可以作为单例工作名字。
您可以创建一个字典,将唯一名称作为键,将 Press 对象作为值。这不需要是一个全球性的命令。你可以像这样用 class 包裹它:
class Press:
def __init__(self, name):
self.name = name
self.books = []
class PressManager:
presses = {}
@classmethod
def get_press(cls, name):
if name not in cls.presses:
cls.presses[name] = Press(name)
return cls.presses[name]
example_press = PressManager.get_press("Test")
我将 get_press()
实现为 class 方法,因为我认为这就是您的想法。