Python 抽象工厂模式

抽象工厂模式也称为工厂工厂。该设计模式属于创新设计模式类别。它提供了创建对象的最佳方法之一。

它包含一个接口,负责创建与Factory相关的对象。

如何实现抽象工厂模式?

以下程序有助于实现抽象工厂模式。

# Filename : example.py
# Date : 2020-08-22
class Window:
    __toolkit = ""
    __purpose = ""
    def __init__(self, toolkit, purpose):
        self.__toolkit = toolkit
        self.__purpose = purpose
    def getToolkit(self):
        return self.__toolkit
    def getType(self):
        return self.__purpose
class GtkToolboxWindow(Window):
    def __init__(self):
        Window.__init__(self, "Gtk", "ToolboxWindow")
class GtkLayersWindow(Window):
    def __init__(self):
        Window.__init__(self, "Gtk", "LayersWindow")
class GtkMainWindow(Window):
    def __init__(self):
        Window.__init__(self, "Gtk", "MainWindow")
class QtToolboxWindow(Window):
    def __init__(self):
        Window.__init__(self, "Qt", "ToolboxWindow")
class QtLayersWindow(Window):
    def __init__(self):
        Window.__init__(self, "Qt", "LayersWindow")
class QtMainWindow(Window):
    def __init__(self):
        Window.__init__(self, "Qt", "MainWindow")
# Abstract factory class
class UIFactory:
    def getToolboxWindow(self): pass
    def getLayersWindow(self): pass
    def getMainWindow(self): pass
class GtkUIFactory(UIFactory):
    def getToolboxWindow(self):
        return GtkToolboxWindow()
    def getLayersWindow(self):
        return GtkLayersWindow()
    def getMainWindow(self):
        return GtkMainWindow()
class QtUIFactory(UIFactory):
    def getToolboxWindow(self):
        return QtToolboxWindow()
    def getLayersWindow(self):
        return QtLayersWindow()
    def getMainWindow(self):
        return QtMainWindow()
if __name__ == "__main__":
    gnome = True
    kde = not gnome
    if gnome:
        ui = GtkUIFactory()
    elif kde:
        ui = QtUIFactory()
    toolbox = ui.getToolboxWindow()
    layers = ui.getLayersWindow()
    main = ui.getMainWindow()
    print("%s:%s" % (toolbox.getToolkit(), toolbox.getType()))
    print("%s:%s" % (layers.getToolkit(), layers.getType()))
    print("%s:%s" % (main.getToolkit(), main.getType()))

输出

上面的程序生成以下输出:

Gtk:ToolboxWindow
Gtk:LayersWindow
Gtk:MainWindow

说明

在上面的程序中,抽象工厂为每个窗口创建对象。它调用每个方法,该方法将按预期执行输出。

下一章:Python 迭代器模式

迭代器设计模式属于行为设计模式类别。开发人员几乎在每种编程语言中都遇到了迭代器模式。这种模式的使用方式有助于在不了解底层设计的情况下按顺序访问集合(类)的元素。 如何实现迭代器模式?我们现在将了解如何实现 ...