写点什么

架构师训练营 第三周 作业

用户头像
阿光
关注
发布于: 2020 年 11 月 15 日

作业一:

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

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

主要接口是 printable,需要实现 print 方法。



所有的组件包括容器,都继承自 component,它实现 print 方法。

容器多包含了一个 list 用来装 components。

go 实现,代码如下


package main
import ( "container/list" "fmt")
type printable interface { Print()}
type component struct { name string componentType string}
func (p *component) Print() { fmt.Println(fmt.Sprintf("print %s(%s)", p.componentType, p.name))}
// Container control can hold other controlstype container struct { component components list.List}
func (c *container) Print() { c.component.Print() for i := c.components.Front(); i != nil; i = i.Next() { i.Value.(printable).Print() }}
func (c *container) AddComponent(cpnt printable) { c.components.PushBack(cpnt)}
type winform struct { container}
type picture struct { component}
type button struct { component}
type frame struct { container}
type label struct { component}
type textBox struct { component}
type passwordBox struct { component}
type checkBox struct { component}
type linkLabel struct { component}
func newWinform(name string) *winform { return &winform{container{component: component{componentType: "WinForm", name: name}}}}
func newPicture(name string) *picture { return &picture{component{componentType: "Picture", name: name}}}
func newButton(name string) *button { return &button{component{componentType: "Button", name: name}}}
func newFrame(name string) *frame { return &frame{container{component: component{componentType: "Frame", name: name}}}}
func newLabel(name string) *label { return &label{component{componentType: "Label", name: name}}}
func newTextBox(name string) *textBox { return &textBox{component{componentType: "TextBox", name: name}}}
func newPasswordBox(name string) *passwordBox { return &passwordBox{component{componentType: "PasswordBox", name: name}}}
func newCheckBox(name string) *checkBox { return &checkBox{component{componentType: "CheckBox", name: name}}}
func newLinkLabel(name string) *linkLabel { return &linkLabel{component{componentType: "LinkLabel", name: name}}}
func main() { form := newWinform("MainForm") form.AddComponent(newPicture("LOGO")) form.AddComponent(newButton("sign in")) form.AddComponent(newButton("sign up")) frame := newFrame("Frame1") form.AddComponent(frame) frame.AddComponent(newLabel("user name")) frame.AddComponent(newTextBox("user name textbox")) frame.AddComponent(newLabel("password")) frame.AddComponent(newPasswordBox("password box")) frame.AddComponent(newCheckBox("keep sign in")) frame.AddComponent(newLabel("keep sign in")) frame.AddComponent(newLinkLabel("forget password")) form.Print()}
复制代码


发布于: 2020 年 11 月 15 日阅读数: 25
用户头像

阿光

关注

还未添加个人签名 2020.05.01 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 第三周 作业