【架构师训练营 - 作业 -3】单例和组合
发布于: 2020 年 06 月 24 日
1. 请在草稿纸上手写一个单例模式的实现代码,拍照提交作业。
2. 请用组合设计模式编写程序,打印输出图 1 的窗口,窗口组件的树结构如图 2 所示,打印输出示例参考图 3。
单例模式-Python装饰器版本
组合模式-Python版本
from abc import ABCMeta, abstractmethodclass Component(metaclass=ABCMeta): @abstractmethod def draw(self): passclass Container(Component, metaclass=ABCMeta): def __init__(self): super().__init__() self._components = [] @abstractmethod def layout(self): pass def add_component(self, item): if item not in self._components: self._components.append(item) def remove_component(self, item): if item in self._components: self._components.remove(item) def draw(self): self.layout() for item in self._components: item.draw()class WinForm(Container): def __init__(self, name, width=0, height=0): super().__init__() self._width = width self._height = height self._name = name def layout(self): print(self._name)class Picture(Component): def __init__(self, url): super().__init__() self._url = url def draw(self): print(self._url)class Button(Component): def __init__(self, name, listener=None): super().__init__() self._name = name self._listener = listener def draw(self): print(self._name)class Frame(Container): def __init__(self, name, x=0, y=0, width=0, height=0): super().__init__() self._x = x self._y = y self._width = width self._height = height self._name = name def layout(self): print(self._name)class Label(Component): def __init__(self, text): super().__init__() self._text = text def draw(self): print(self._text)class TextBox(Component): def __init__(self, text): super().__init__() self._text = text def draw(self): print(self._text)class PasswordBox(Component): def __init__(self, text): super().__init__() self._text = text def draw(self): print(self._text)class CheckBox(Component): def __init__(self, text, is_selected=False): super().__init__() self._text = text self._is_selected = is_selected def draw(self): print(self._text)class LinkLabel(Component): def __init__(self, text, link=None): super().__init__() self._text = text self._link = link def draw(self): print(self._text) def main(*args, **kwargs): windows = WinForm("WINDOW窗口") windows.add_component(Picture(url="LOGO图片")) windows.add_component(Button(name="登录")) windows.add_component(Button(name="注册")) frame = Frame(name="FRAME1") windows.add_component(frame) frame.add_component(Label("用户名")) frame.add_component(TextBox("文本框")) frame.add_component(Label("密码")) frame.add_component(PasswordBox("密码框")) frame.add_component(CheckBox("复选框")) frame.add_component(TextBox("记住用户名")) frame.add_component(LinkLabel("忘记密码")) windows.draw()if __name__ == '__main__': main()
划线
评论
复制
发布于: 2020 年 06 月 24 日阅读数: 49
Andy
关注
还未添加个人签名 2018.10.29 加入
还未添加个人简介
评论