架构师训练营第 0 期 - 第 3 周 - 命题作业
发布于: 2020 年 06 月 24 日
作业一:
请在草稿纸上手写一个单例模式的实现代码,拍照提交作业
解答:
作业二:
请用组合设计模式编写程序,打印输出图 1 的窗口,窗口组件的树结构如图 2 所示,打印输出示例参考图 3。
解答:
package mainimport ( "container/list" "fmt")// Printable 可打印接口type Printable interface { PrintUI()}// Container 容器type Container struct { *list.List Name string}// PrintUI 实现接口func (c *Container) PrintUI() { // 打印容器自己 fmt.Println("print", c.Name) // 打印容器内部的成员 e := c.List.Front() for e != nil { e.Value.(Printable).PrintUI() e = e.Next() }}// Add 往容器中放入对象func (c *Container) Add(obj Printable) { c.List.PushBack(obj)}// Element 容器内的成员type Element struct { Name string}// PrintUI 实现接口func (e *Element) PrintUI() { fmt.Println("print", e.Name)}func main() { // 创建容器和元素,并将元素按照关系添加到容器中 win := &Container{list.New(), "WinForm(WINDOW窗口)"} pic := &Element{"Picture(LOGO图片)"} win.Add(pic) btn1 := &Element{"Button(登录)"} win.Add(btn1) btn2 := &Element{"Button(注册)"} win.Add(btn2) frame := &Container{list.New(), "Frame(FRAME1)"} { lable1 := &Element{"Lable(用户名)"} frame.Add(lable1) tbox := &Element{"TextBox(文本框)"} frame.Add(tbox) lable2 := &Element{"Lable(密码)"} frame.Add(lable2) pwdBox := &Element{"PasswordBox(密码框)"} frame.Add(pwdBox) cBox := &Element{"CheckBox(复选框)"} frame.Add(cBox) tbox2 := &Element{"TextBox(记住用户名)"} frame.Add(tbox2) linkLable := &Element{"LinkLable(忘记密码)"} frame.Add(linkLable) } win.Add(frame) // 打印主窗口,即可打印其中所有元素 win.PrintUI()}
运行结果:
划线
评论
复制
发布于: 2020 年 06 月 24 日阅读数: 52
煜
关注
还未添加个人签名 2018.09.10 加入
还未添加个人简介
评论