极客时间第 0 期架构师训练营第三周作业
发布于: 2020 年 06 月 24 日
1. 请在草稿纸上手写一个单例模式的实现代码,拍照提交作业。
golang版懒汉模式:
2. 请用组合设计模式编写程序,打印输出图 1 的窗口,窗口组件的树结构如图 2 所示,打印输出示例参考图 3。
package mainimport ( "fmt")// interfacetype 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}// drawfunc (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()}
划线
评论
复制
发布于: 2020 年 06 月 24 日阅读数: 54
2流程序员
关注
还未添加个人签名 2020.03.18 加入
还未添加个人简介
评论