抽象工厂(python实现)借鉴与《设计模式》一书中进行python软件代码设计
1 . 意图
提供一个创建一系列相关或者依赖对象的接口,而无需指定它们具体的类。
2 . kit
3 . 动机
假如我们要做一个支持多种视感(look-and-feel)标准的用户界面工具包,例如motif和presentation manager 不同的视感风格如滚动条,窗口和按钮等用户界面“窗口组件”定义不同的外观和行为。为保证视感风格标准间的可移植性,一个应用不应该为一个特定的视感外观硬编码它的窗口组件。在整个应用中实例化特定视感风格的窗口组件类将使得以后很难改变视感风格。
为解决这一个问题我们可以定义一个抽象的WidgetFactory类,这个类声明了一个用来创建每一类基本窗口组件的接口。每一类窗口组件都有一个抽象类,而具体子类则实现了窗口组件的特定视感风格。对于每一个抽象窗口组件,WidgetFactory接口都有一个返回新窗口组件对象的操作。客户调用这些操作以获得窗口组件实例,但客户并不知道他们正在使用的是哪些具体类。这样客户就不依赖于一般的视感风格,如下图所示
根据以上图片,用python写出其模式如下,创建了五个类,WidgetFactory,WidgetFactory,PMWidgetFactory,ScrollBar,Window
# 创建基本的窗口及滚动条的类
class WidgetFactory(object):
def __str__(self):
str_explain = "这是一个创建可视化窗口的类"
return str_explain
def __init__(self):
pass
def CreateScrollBar(self):
# 创建一个滚动条
pass
def CreateWindow(self):
# 创建一个窗口
pass
# motif风格的滚动条创建和窗口创建
class MotifWidgetFactory(WidgetFactory):
def __str__(self):
str_explain = "这是创建motif的子类"
return str_explain
def __init__(self):
super(WidgetFactory, self).__init__()
def CreateScrollBar(self):
# 创建一个滚动条
pass
def CreateWindow(self):
# 创建一个窗口
pass
# pm风格的滚动条创建和窗口创建
class PMWidgetFactory(WidgetFactory):
def __str__(self):
str_explain = "这是创建PM风格的子类"
return str_explain
def __init__(self):
super(WidgetFactory, self).__init__()
def CreateScrollBar(self):
# 创建一个滚动条
pass
def CreateWindow(self):
# 创建一个窗口
pass
# 创建滚动条的类
class ScrollBar(object):
def __str__(self):
str_explain = "这是创建ScrollBar的类"
return str_explain
def __init__(self):
pass
def PMScrollBar(self):
# 创建一个PM滚动条
pass
def MotifScrollBar(self):
# 创建一个Motif滚动条
pass
# 创建window窗口的类
class Window(object):
def __str__(self):
str_explain = "这是创建window的类"
return str_explain
def __init__(self):
pass
def PMWindow(self):
# 创建一个PM风格的窗口
pass
def MotifWindow(self):
# 创建一个Motif风格的窗口
pass