【架构师训练营 - 作业 -3】单例和组合

发布于: 2020 年 06 月 24 日

1. 请在草稿纸上手写一个单例模式的实现代码,拍照提交作业。

2. 请用组合设计模式编写程序,打印输出图 1 的窗口,窗口组件的树结构如图 2 所示,打印输出示例参考图 3。

单例模式-Python装饰器版本

组合模式-Python版本

from abc import ABCMeta, abstractmethod
class Component(metaclass=ABCMeta):
@abstractmethod
def draw(self):
pass
class 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()

用户头像

Andy

关注

还未添加个人签名 2018.10.29 加入

还未添加个人简介

评论

发布
暂无评论
【架构师训练营 - 作业 -3】单例和组合