架构师训练营第三周”代码重构“作业
发布于: 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 加入
还未添加个人简介











评论