1
架构师训练营第二期 Week 3 作业
发布于: 2020 年 11 月 08 日
请在草稿纸上手写一个单例模式的实现代码,拍照提交作业。
请用组合设计模式编写程序,打印输出图 1 的窗口,窗口组件的树结构如图 2 所示,打印输出示例参考图 3。
module Renderable
def render
raise NotImplementedError
end
end
class SimpleComponent
include Renderable
attr_accessor :name
def initialize(name)
self.name = name
end
def render
puts "print #{type}(#{name})"
end
private
def type
raise NotImplementedError
end
end
class CompositeComponent < SimpleComponent
attr_accessor :components
def initialize(name, components = [])
super(name)
self.components = components
end
def render
super
components.each(&:render)
end
end
class Picture < SimpleComponent
def type
'Picture'
end
end
class Button < SimpleComponent
def type
'Button'
end
end
class Label < SimpleComponent
def type
'Label'
end
end
class TextBox < SimpleComponent
def type
'TextBox'
end
end
class PasswordBox < SimpleComponent
def type
'PasswordBox'
end
end
class CheckBox < SimpleComponent
def type
'CheckBox'
end
end
class LinkLabel < SimpleComponent
def type
'LinkLabel'
end
end
class Frame < CompositeComponent
def type
'Frame'
end
end
class WinForm < CompositeComponent
def type
'WinForm'
end
end
WinForm.new(
'WINDOW窗口',
[
Picture.new('LOGO图片'),
Button.new('登录'),
Button.new('注册'),
Frame.new('FRAME1', [
Label.new('用户名'),
TextBox.new('文本框'),
Label.new('密码'),
PasswordBox.new('密码框'),
CheckBox.new('复选框'),
TextBox.new('记住用户名'),
LinkLabel.new('忘记密码')
])
]
).render
复制代码
输出如下:
➜ ruby composite_pattern.rb
print WinForm(WINDOW窗口)
print Picture(LOGO图片)
print Button(登录)
print Button(注册)
print Frame(FRAME1)
print Label(用户名)
print TextBox(文本框)
print Label(密码)
print PasswordBox(密码框)
print CheckBox(复选框)
print TextBox(记住用户名)
print LinkLabel(忘记密码)
复制代码
划线
评论
复制
发布于: 2020 年 11 月 08 日阅读数: 25
bigxiang
关注
还未添加个人签名 2018.03.21 加入
还未添加个人简介
评论