Python设计模式系列之三: 创建型Factory Method模式
2007-03-30 12:55:15 来源:WEB开发网在具体实现时可以设计一个通用接口Editable,并且让所有处理特定个人信息(如通信地址和电话号码)的用户界面都继承于它,而PIM则通过Editable提供的方法getEditor()获得Editor的一个实例,并利用它来对用户输入进行统一的处理。例如,当用户完成输入之后,PIM可以调用Editor中的方法getContent()来获取用户输入的数据,或者调用resetUI()来清除用户输入的数据。在采用这一体系结构之后,如果要扩展PIM的功能,只需添加与之对应的Editable和Editor就可以了,而不用对PIM本身进行修改。
现在离目标还有一步之遥,由于Editable和Editor都只是通用的接口,但PIM却需要对它们的子类进行实例化,此时自然应该想到运用工厂方法模式,为PIM定义一个EditableFactory接口来创建Editable的对象。这样一来,整个PIM的体系结构就将如图2所示。
图2
Editable接口定义了一个公共的构造性方法(builder method)getEditor(),它返回一个Editor对象,其完整的代码如清单1所示。任何一项个人信息都拥有自己独立的用户界面(Editor),负责获取数据并在需要的时候进行修改,而PIM唯一要做事情的只是通过Editable来获得Editor,并利用它来对用户输入的数据进行相应的操作。
代码清单1:editable.py
class Editable:
""" 个人信息用户界面的公共接口 """
# 获得个人信息编辑界面
def getEditor(self):
pass
Editor接口给出了处理所有个人信息的公共接口,其完整的代码如清单2所示。PIM通过调用getUI()方法能够获得与用户进行交互的UI组件,根据当前正在处理的个人信息的不同,这些组件可能简单到只是一个文本输入框,也可以复杂到是一个包含了多个图形控件(Widget)的对话框。利用Editor提供的getContent()、commitChanges()和resetUI()方法,PIM还可以获取、提交或者清空用户输入的个人信息。在引入Editor之后, PIM就能够从处理特定个人信息的用户界面中解脱出来,从而可以将注意力集中在如何对这些信息进行统一管理的问题上。
更多精彩
赞助商链接