写点什么

架构师训练营 - 第三周作业

用户头像
Mark
关注
发布于: 2021 年 01 月 16 日

0.作业要求


1.类型设计与实现


Widget(接口): 所有的组件都应实现 Draw 方法。一般组件只需要渲染组件本身即可,容器组件要渲染自己,同时渲染自己的子组件

Container: 所有容器组件的父类,实现 Widget 接口的同时,定义了 Add 方法,将子组件添加至容器

Window 和 Frame: 继承自 Container。Draw 方法为先渲染自身,再调用父类 Draw 方法渲染子组件

NormalWidget: 只需渲染自己的组件,包括 Label, CheckBox, Input 等。


// ##########接口与基类##########
type Widget interface { Draw()}
type Container struct { Widgets *[]Widget}
func (c Container) Draw() {
for _, w := range *c.Widgets {
w.Draw()
}
}
func (c *Container) Add(w Widget) { c.Widgets = append(c.Widgets, w)}
// ##########容器实现类##########
type WinForm struct { Name string Container}
func (w WinForm) Draw() { println("print WinForm(" + w.Name + ")") w.Container.Draw()}
type Frame struct { Name string Container
}
func (f Frame) Draw() { println("print Frame(" + f.Name + ")") f.Container.Draw()}
// ##########普通组件类##########
type Picture string
func (p Picture) Draw() { println("print Picture(" + p + ")")}
type CheckBox string
func (c CheckBox) Draw() {
println("print CheckBox(" + c + ")")
}
type PasswordBox string
func (p PasswordBox) Draw() { println("print TextBox(" + p + ")")}
type Button string
func (b Button) Draw() { println("print Button(" + b + ")")}
type Label string
func (l Label) Draw() { println("print Label(" + l + ")")}
type LinkLabel string
func (l LinkLabel) Draw() { println("print LinkLabel(" + l + ")")}
type TextBox string
func (t TextBox) Draw() { println("print TextBox(" + t + ")")}
复制代码


2.main 方法与执行结果

func main() {	window := WinForm{		Name:      "Window窗口",		Container: Container{Widgets: &[]Widget{}},	}
frame := Frame{ Name: "FRAME1", Container: Container{Widgets: &[]Widget{}}, }
// window关联子组件 { picture := Picture("LOGO图片") window.Add(picture) buttonLogin := Button("登录") window.Add(buttonLogin) buttonRegister := Button("注册") window.Add(buttonRegister) window.Add(frame) }
// frame关联子组件 { labelUserName := Label("用户名") frame.Add(labelUserName) textBox := TextBox("文本框") frame.Add(textBox) labelPassword := TextBox("密码") frame.Add(labelPassword) checkBox := CheckBox("复选框") frame.Add(checkBox) labelRememberUser := Label("记住用户名") frame.Add(labelRememberUser) linkLabel := LinkLabel("忘记密码") frame.Add(linkLabel) }
window.Draw()}
复制代码



发布于: 2021 年 01 月 16 日阅读数: 12
用户头像

Mark

关注

还未添加个人签名 2019.06.22 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 - 第三周作业