您的位置:首页 > 编程语言 > Python开发

python设计模式(2)-Abstract Factory(抽象工厂)

2010-09-29 21:35 453 查看
Abstract Factory模式,将具体的产品封装在具体Factory实现中,而客户只需要和Factory以及产品的抽象界面打交道,避免依赖于具体的Factory与产品,由于Factory封装了所有产品细节,所以要更换掉所有的组件,只要简单的抽换掉Factory就可以 了,不用修改客户端。例如,要制作一个跨平台的窗口程序,窗口由一系列控件组成,比如菜单,工具栏,按钮,滚动条等。为简化起见,设这个窗口只有菜单和工具栏。则程序如下:

#Abstract Factory-抽象工厂模式

class CClientWindow(object):
"""客户端窗口,代表客户端"""
def __init__(self,ctrlfactory):
self.SetCtrlFactory(ctrlfactory)

def SetCtrlFactory(self,ctrlfactory):
self.m_CtrlFactory=ctrlfactory
self.SetMenu(self.m_CtrlFactory.GetMenu())
self.SetToolBar(self.m_CtrlFactory.GetToolBar())

def SetMenu(self,menu):
self.m_Menu=menu

def SetToolBar(self,toolbar):
self.m_ToolBar=toolbar

def ShowWindow(self):
self.m_Menu.ShowMenu()
self.m_ToolBar.ShowToolBar()

class CMenu(object):
"""抽象菜单"""
def ShowMenu(self):
pass

class CWindowsMenu(CMenu):
"""具体菜单,用于Windows系统"""
def ShowMenu(self):
print 'CWindowsMenu ShowMenu'

class CLinuxMenu(CMenu):
"""具体菜单,用于Linux系统"""
def ShowMenu(self):
print 'CLinuxMenu ShowMenu'

class CToolBar(object):
"""抽象工具栏"""
def ShowToolBar(self):
pass

class CWindowsToolBar(CToolBar):
"""具体工具栏,用于Windows系统"""
def ShowToolBar(self):
print 'CWindowsToolBar ShowToolBar'

class CLinuxToolBar(CToolBar):
"""具体工具栏,用于Linux系统"""
def ShowToolBar(self):
print 'CLinuxToolBar ShowToolBar'

class CCtrlFactory(object):
"""抽象工厂,用于产生跨平台产生所有窗口控件"""
def GetMenu(self):
pass
def GetToolBar(self):
pass

class CWindowsCtrlFactory(object):
"""具体工厂,产生Windows下所需的所有窗口控件"""
def GetMenu(self):
return CWindowsMenu()
def GetToolBar(self):
return CWindowsToolBar()

class CLinuxCtrlFactory(object):
"""具体工厂,产生Linux下所需的所有窗口控件"""
def GetMenu(self):
return CLinuxMenu()
def GetToolBar(self):
return CLinuxToolBar()

#客户程序运行
wnd=CClientWindow(CWindowsCtrlFactory())
wnd.ShowWindow()


 

运行:

CWindowsMenu ShowMenu
CWindowsToolBar ShowToolBar

 

 

Abstract Factory结构图如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息