写点什么

架构师训练营第三周”代码重构“作业

用户头像
随秋
关注
发布于: 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(忘记密码)
复制代码


用户头像

随秋

关注

还未添加个人签名 2018.04.27 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第三周”代码重构“作业