抽象工厂模式也被称为工厂的工厂。 此设计模式属于创建设计模式类别。 它提供了创建对象的最佳方法之一。
它包含一个接口,负责创建与工厂相关的对象。
参考以下程序,演示如何实现抽象工厂模式。
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())
执行上面示例代码,得到以下结果 -
说明
在上面的程序中,抽象工厂为每个窗口创建对象。 它调用每个方法,按预期执行输出。