目录

抽象工厂(Abstract Factory)

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

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

如何实现抽象工厂模式?

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

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())

输出 (Output)

上述程序生成以下输出 -

抽象工厂模式

说明 (Explanation)

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

↑回到顶部↑
WIKI教程 @2018