第三周作业
发布于: 2020 年 09 月 07 日
手写单例
组合模式
package mainimport ( "fmt")func main() { w:=NewWindowForm("WINDOW窗口") w.Add(NewPicture("LOGO图片")) w.Add(NewButton("登录")) w.Add(NewButton("注册")) f:=NewFrame("FRAME1") f.Add(NewLable("用户名")) f.Add(NewTextBox("文本框")) f.Add(NewLable("密码")) f.Add(NewPasswordBox("密码框")) f.Add(NewCheckBox("复选框")) f.Add(NewTextBox("记住用户名")) f.Add(NewLinkLable("忘记密码")) w.Add(f) w.Draw()}type Component interface { Draw()}type Contain interface { Component Add()}type WindowForm struct { name string components []Component}func NewWindowForm(n string) *WindowForm { return &WindowForm{name: n}}func (w WindowForm) Draw() { fmt.Printf("WinForm(%s)\n", w.name) for _, c := range w.components { c.Draw() }}func (w *WindowForm) Add(c Component) { w.components = append(w.components, c)}type Picture struct { name string}func NewPicture(n string) *Picture { return &Picture{name: n}}func (p Picture) Draw() { fmt.Printf("Picture(%s)\n", p.name)}type Button struct { name string}func NewButton(n string) *Button { return &Button{name:n}}func (b Button) Draw() { fmt.Printf("Button(%s)\n",b.name)}type Frame struct { name string components []Component}func NewFrame(n string) *Frame { return &Frame{name:n}}func (f Frame) Draw() { fmt.Printf("Frame(%s)\n",f.name) for _, c := range f.components { c.Draw() }}func (f *Frame) Add(c Component) { f.components = append(f.components, c)}type Lable struct { name string}func NewLable(n string) *Lable { return &Lable{name:n}}func (l Lable) Draw() { fmt.Printf("Lable(%s)\n",l.name)}type TextBox struct { name string}func NewTextBox(n string) *TextBox { return &TextBox{name:n}}func (t TextBox) Draw() { fmt.Printf("TextBox(%s)\n",t.name)}type PasswordBox struct { name string}func NewPasswordBox(n string) *PasswordBox { return &PasswordBox{name:n}}func (t PasswordBox) Draw() { fmt.Printf("PasswordBox(%s)\n",t.name)}type CheckBox struct { name string}func NewCheckBox(n string) *CheckBox { return &CheckBox{name:n}}func (t CheckBox) Draw() { fmt.Printf("CheckBox(%s)\n",t.name)}type LinkLable struct { name string}func NewLinkLable(n string) *LinkLable { return &LinkLable{name:n}}func (t LinkLable) Draw() { fmt.Printf("LinkLable(%s)\n",t.name)}
正文不能少于50字
正文不能少于50字
正文不能少于50字
正文不能少于50字
正文不能少于50字
正文不能少于50字
正文不能少于50字
正文不能少于50字
正文不能少于50字
正文不能少于50字
正文不能少于50字
正文不能少于50字
划线
评论
复制
发布于: 2020 年 09 月 07 日阅读数: 39
版权声明: 本文为 InfoQ 作者【Vincent】的原创文章。
原文链接:【http://xie.infoq.cn/article/e96371c7a9e31ca589c53a005】。文章转载请联系作者。
Vincent
关注
还未添加个人签名 2018.07.06 加入
上个课还要写作业,哎,挺好,挺好。
评论