首页 > 解决方案 > 如何将单例和工厂设计模式与python结合起来?

问题描述

假设有几家出版社,每家出版了很多书我要处理很多记录,比如“出版社名称,书名”

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

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

标签: pythondesign-patternssingletonfactory

解决方案


您可以创建一个具有唯一名称作为键和 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()为类方法,因为我认为这是您的想法。


推荐阅读