架构师训练营第三周”代码重构“作业
发布于: 2020 年 12 月 12 日
代码
组合模式 Python 代码示例。
ComponentBase 为组件基类,实现一些基础共有功能
其它类基于 ComponentBase 实现(这里没有考虑其它组件之间可能的复杂继承关系)。
具体子类只要实现 display_node 即可,只需要关心自身组件如何展示画图
# -*- encoding:utf-8 -*-
class ComponentBase:
"""
基础组件类
"""
def __init__(self, name):
self.name = name
self.children = []
def add(self, component):
self.children.append(component)
def display_node(self):
raise NotImplementedError
def display(self):
self.display_node()
for child in self.children:
child.display()
class WinFormComponent(ComponentBase):
"""
Window窗口
"""
def display_node(self):
print("WinForm({})".format(self.name))
class PictureComponent(ComponentBase):
"""
图片
"""
def display_node(self):
print("Picture({})".format(self.name))
class ButtonComponent(ComponentBase):
"""
按钮
"""
def display_node(self):
print("Button({})".format(self.name))
class FrameComponent(ComponentBase):
"""
Frame
"""
def display_node(self):
print("Frame({})".format(self.name))
class LableComponent(ComponentBase):
"""
文本
"""
def display_node(self):
print("Lable({})".format(self.name))
class TextBoxComponent(ComponentBase):
"""
文本框
"""
def display_node(self):
print("TextBox({})".format(self.name))
class PasswordBoxComponent(ComponentBase):
"""
密码框
"""
def display_node(self):
print("PasswordBox({})".format(self.name))
class CheckBoxComponent(ComponentBase):
"""
复选框
"""
def display_node(self):
print("PasswordBox({})".format(self.name))
class LinkLableComponent(ComponentBase):
"""
链接
"""
def display_node(self):
print("PasswordBox({})".format(self.name))
if __name__ == '__main__':
win_form = WinFormComponent("WINDOW窗口")
win_form.add(PictureComponent("LOGO图片"))
win_form.add(ButtonComponent("登录"))
win_form.add(ButtonComponent("注册"))
frame = FrameComponent("FRAME1")
win_form.add(frame)
frame.add(LableComponent("用户名"))
frame.add(TextBoxComponent("文本框"))
frame.add(LableComponent("密码"))
frame.add(PasswordBoxComponent("密码框"))
frame.add(CheckBoxComponent("复选框"))
frame.add(TextBoxComponent("记住用户名"))
frame.add(LinkLableComponent("忘记密码"))
win_form.display()
复制代码
执行结果
WinForm(WINDOW窗口)
Picture(LOGO图片)
Button(登录)
Button(注册)
Frame(FRAME1)
Lable(用户名)
TextBox(文本框)
Lable(密码)
PasswordBox(密码框)
PasswordBox(复选框)
TextBox(记住用户名)
PasswordBox(忘记密码)
复制代码
划线
评论
复制
发布于: 2020 年 12 月 12 日阅读数: 20
随秋
关注
还未添加个人签名 2018.04.27 加入
还未添加个人简介
评论