架构师训练营第 0 期 - 第 3 周 - 命题作业

用户头像
关注
发布于: 2020 年 06 月 24 日

作业一:

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



解答:



作业二:

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



解答:

package main
import (
"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()
}

运行结果:



用户头像

关注

还未添加个人签名 2018.09.10 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第 0 期 - 第 3 周 - 命题作业