架构师训练营第 1 期第 3 周作业
发布于: 2020 年 10 月 04 日
组合模式实现窗口显示(打印)
Component为接口。
各个具体组件实现Component的PrintComponent()接口。
其中WinForm,Frame为组合其他Component的非叶节点,内部包含子节点容器;其他类为叶节点。
作为叶节点,直接实现自身打印。
作为非叶节点,除了实现自身打印,还要调用容器内的子节点执行打印。
package mainimport "fmt"func main() { //创建winform,并添加子元素 wf := WinForm {tag: "WINDOWS窗口", v: make([]Component, 0, 10)} pic := Picture{tag: "LOGO图片"} wf.AddSubComponent(pic) bt1 := Button{tag: "登录"} wf.AddSubComponent(bt1) bt2 := Button{tag: "注册"} wf.AddSubComponent(bt2) //创建frame,并添加子元素 f := Frame{tag: "FRAME1", v: make([]Component, 0, 10)} lb1 := Lable{tag: "用户名"} f.AddSubComponent(lb1) tb := TextBox{tag: "文本框"} f.AddSubComponent(tb) lb2 := Lable{tag: "密码"} f.AddSubComponent(lb2) pb := PasswordBox{tag: "密码框"} f.AddSubComponent(pb) cb := CheckBox{tag: "复选框"} f.AddSubComponent(cb) lb3 := Lable{tag: "记住用户名"} f.AddSubComponent(lb3) ll := LinkLable{tag: "忘记密码"} f.AddSubComponent(ll) //将frame添加到winform wf.AddSubComponent(f) //打印winform wf.PrintComponent()}// Componenttype Component interface { PrintComponent()}// WinFormtype WinForm struct { v []Component tag string}func (wf WinForm) PrintComponent() { fmt.Printf("print WinForm (%s)\r\n", wf.tag) for i:= range(wf.v) { wf.v[i].PrintComponent() }}func (wf *WinForm) AddSubComponent(c Component) { wf.v = append(wf.v, c)}// Picturetype Picture struct { tag string}func (p Picture) PrintComponent() { fmt.Printf("print Picture (%s)\r\n", p.tag)}// Buttontype Button struct { tag string}func (b Button) PrintComponent() { fmt.Printf("print Button (%s)\r\n", b.tag)}// Frametype Frame struct { v []Component tag string}func (f Frame) PrintComponent() { fmt.Printf("print Frame (%s)\r\n", f.tag) for i:= range(f.v) { f.v[i].PrintComponent() }}func (f *Frame) AddSubComponent(c Component) { f.v = append(f.v, c)}// Labletype Lable struct { tag string}func (l Lable) PrintComponent() { fmt.Printf("print Lable (%s)\r\n", l.tag)}// TextBoxtype TextBox struct { tag string}func (t TextBox) PrintComponent() { fmt.Printf("print TextBox (%s)\r\n", t.tag)}// PasswordBoxtype PasswordBox struct { tag string}func (p PasswordBox) PrintComponent() { fmt.Printf("print PasswordBox (%s)\r\n", p.tag)}// CheckBoxtype CheckBox struct { tag string}func (cb CheckBox) PrintComponent() { fmt.Printf("print CheckBox (%s)\r\n", cb.tag)}// LinkLabletype LinkLable struct { tag string}func (ll LinkLable) PrintComponent() { fmt.Printf("print LinkLable (%s)\r\n", ll.tag)}
划线
评论
复制
发布于: 2020 年 10 月 04 日 阅读数: 19
du tiezheng
关注
还未添加个人签名 2018.08.16 加入
还未添加个人简介
评论