Python设计模式系列之三: 创建型Factory Method模式
2007-03-30 12:55:15 来源:WEB开发网核心提示: EditablePhone是Editable的另一个具体实现,PIM使用它来处理个人电话号码,Python设计模式系列之三: 创建型Factory Method模式(6),其完整的代码如清单4所示,代码清单4:editablephone.pyfrom editor import Edito
EditablePhone是Editable的另一个具体实现,PIM使用它来处理个人电话号码,其完整的代码如清单4所示。
代码清单4:editablephone.py
from editor import Editor
from editable import Editable
import Tkinter
class EditablePhone(Editable):
""" 用于处理个人电话号码的Editable """
# 构造函数
def __init__(self, master):
self.master =master
self.areaCode = "";
self.phoneNumber = ""
self.editor = PhoneEditor(self)
# 获取相关联的Editor
def getEditor(self):
return self.editor
class PhoneEditor(Editor, Tkinter.Frame):
""" 用于处理个人电话号码的Editor """
# 构造函数
def __init__(self, owner):
self.owner = owner
Tkinter.Frame.__init__(self, self.owner.master)
self.areaCode = Tkinter.StringVar()
self.phoneNumber = Tkinter.StringVar()
# 构造用户界面
codeLabel = Tkinter.Label(self, text="Area Code:")
codeEntry = Tkinter.Entry(self, textvariable=self.areaCode)
codeLabel.config(anchor=Tkinter.E, width=12, pady=3)
codeLabel.grid(row=0, column=0)
codeEntry.grid(row=0, column=1)
numberLabel = Tkinter.Label(self, text="Phone Number:")
numberEntry = Tkinter.Entry(self, textvariable=self.phoneNumber)
numberLabel.config(anchor=Tkinter.E, width=12, pady=3)
numberLabel.grid(row=1, column=0)
numberEntry.grid(row=1, column=1)
# 重载Editor中的方法,获取代表用户界面(UI)的对象
def getUI(self):
return self
# 重载Editor中的方法,获取用户输入的数据
def getContent(self):
content = " Area Code: " + self.areaCode.get() + "
"
content += "Phone Number: " + self.phoneNumber.get() + "
"
return content
# 重载Editor中的方法,提交用户输入的数据
def commitChanges(self):
self.owner.areaCode = self.areaCode.get()
self.owner.phoneNumber = self.phoneNumber.get()
# 重载Editor中的方法,清空用户输入的数据
def resetUI(self):
self.areaCode.set("")
self.phoneNumber.set("")
更多精彩
赞助商链接