架构师面试题 (2)

发布于: 2020 年 06 月 21 日

  1. 请在草稿纸上手写一个单例模式的代码实现

  1. 请用组合时间模式编写程序, 打印输出图1的窗口, 窗口组件的树结构如图2所示

  • Python代码实现

class Component(object):
"""组件接口"""
def do_something(self):
raise NotImplementedError
class BaseComponent(Component):
"""
这个类, 只是为了本练习更加简单而存在的
因为不写这个类, 很多重复代码, 感觉恶心
真实的控件之间, 没有这种统一的共性; 不需要该类
"""
def __init__(self, content):
self.content = content
def do_something(self):
print(f'print {self.__class__.__name__}({self.content})')
class Container(BaseComponent):
def __init__(self, content):
self.children = []
super(Container, self).__init__(content)
def add_child(self, component: Component):
self.children.append(component)
def del_child(self, component: Component):
self.children.remove(component)
def do_something(self):
super().do_something()
for child in self.children:
child.do_something()
class WinForm(Container):
"""容器类: WinForm"""
# 这里也可以重写父类的方法, 实现个性化的功能
class Frame(Container):
"""容器组件: Frame"""
class Button(BaseComponent):
"""叶子组件: 按钮"""
class Picture(BaseComponent):
"""叶子组件: 图片"""
class Label(BaseComponent):
"""叶子组件: 标签"""
class TextBox(BaseComponent):
"""叶子组件: 文本框"""
class PasswordBox(TextBox):
"""叶子组件: 密码框"""
class CheckBox(BaseComponent):
"""叶子组件: 复选框"""
class LinkLabel(Label):
"""叶子组件: 复选框"""
if __name__ == '__main__':
form = WinForm('WINDOW窗口')
form.add_child(Picture('LOGO图片'))
form.add_child(Button('登录'))
form.add_child(Button('注册'))
frame = Frame('FRAME1')
frame.add_child(Label('用户名'))
frame.add_child(TextBox('文本框'))
frame.add_child(Label('密码'))
frame.add_child(PasswordBox('密码框'))
frame.add_child(CheckBox('复选框'))
frame.add_child(TextBox('记住密码'))
frame.add_child(LinkLabel('忘记密码'))
form.add_child(frame)
form.do_something()

用户头像

满山李子

关注

还未添加个人签名 2018.09.18 加入

还未添加个人简介

评论

发布
暂无评论
架构师面试题(2)