极客时间第 0 期架构师训练营第三周作业

发布于: 2020 年 06 月 24 日

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

golang版懒汉模式:

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

package main
import (
"fmt"
)
// interface
type Widget interface {
Draw()
}
type BaseWidget struct {
WidgetType string
text string
subWidgets []Widget
}
// 添加子组件
func (w *BaseWidget) Add(widget Widget) {
w.subWidgets = append(w.subWidgets, widget)
}
// 移除子组件
func (w *BaseWidget) Remove(idx int) {
// todo: 检查idx的有效性
// todo: 空间回收
w.subWidgets[idx] = nil
}
// draw
func (w *BaseWidget) Draw() {
fmt.Println("draw:", w.WidgetType, w.text) // todo:按不同类型调用不同算法
for _, w := range w.subWidgets {
if w == nil {
continue
}
w.Draw()
}
}
func main() {
winform := BaseWidget{WidgetType: "WinForm", text: "Windown窗口"}
picture := BaseWidget{WidgetType: "Picture", text: "logo图片"}
buttonLogin := BaseWidget{WidgetType: "Button", text: "登录"}
buttonReg := BaseWidget{WidgetType: "Button", text: "注册"}
frame := BaseWidget{WidgetType: "Frame", text: "Frame1"}
label1 := BaseWidget{WidgetType: "Lable", text: "用户名"}
textbox := BaseWidget{WidgetType: "TextBox", text: "文本框"}
label2 := BaseWidget{WidgetType: "Lable", text: "用户名"}
passwdBox := BaseWidget{WidgetType: "PasswdBox", text: "密码框"}
checkBox := BaseWidget{WidgetType: "CheckBox", text: "复选框"}
text := BaseWidget{WidgetType: "Text", text: "记住用户名"}
linkLable := BaseWidget{WidgetType: "LinkLable", text: "忘记密码"}
winform.Add(&picture)
winform.Add(&buttonLogin)
winform.Add(&buttonReg)
winform.Add(&frame)
frame.Add(&label1)
frame.Add(&textbox)
frame.Add(&label2)
frame.Add(&passwdBox)
frame.Add(&checkBox)
frame.Add(&text)
frame.Add(&linkLable)
winform.Draw()
}

用户头像

2流程序员

关注

还未添加个人签名 2020.03.18 加入

还未添加个人简介

评论

发布
暂无评论
极客时间第 0 期架构师训练营第三周作业