【问题标题】:how to combine singleton and factory design pattern with python?如何将单例和工厂设计模式与python结合起来?
【发布时间】:2023-03-16 08:58:02
【问题描述】:

假设有几家出版社,每家出版社都出版了很多书 我将处理许多记录,例如“出版社名称、书名”

我想通过一个唯一的名称(字符串)创建“Press”类,但只有不同的字符串可以产生“Press”类的不同实例。

所以,我需要一个像“工厂”这样的类工作,当记录包含新印刷机时创建一个新实例,但如果已经存在具有相同名称的记录,它也可以作为单例工作。

【问题讨论】:

  • 单例在 python 中并不是一个真正的东西。对于您的任务,您可以简单地创建一个字典,将唯一名称作为键,将 Press 对象作为值。
  • 是的,全局 dict 可以解决这个问题,但很难看

标签: python design-patterns singleton factory


【解决方案1】:

您可以创建一个具有唯一名称作为键和 Press 对象作为值的字典。这不需要是全局字典。您可以将它包装在这样的类中:

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() 实现为类方法,因为我认为这就是您的想法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    相关资源
    最近更新 更多