架构师训练营 0 期第三周

发布于: 2020 年 06 月 25 日

作业

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

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

package main
import "fmt"
type Component interface {
Name() string
Form() string
Add(c Component)
Print()
}
type Desc struct {
name string
form string
}
func (d *Desc) Name() string {
return d.name
}
func (d *Desc) Form() string {
return d.form
}
type Frame struct {
Desc
children []Component
}
func NewFrame(name string, form string) Component {
return &Frame{
Desc: Desc{
name: name,
form: form,
},
}
}
func (f *Frame) Add(c Component) {
f.children = append(f.children, c)
}
func (f *Frame) Print() {
fmt.Printf("print %s(%s)\n", f.Form(), f.Name())
for _, v := range f.children {
v.Print()
}
}
type FrameItem struct {
Desc
}
func NewFrameItem(name string, form string) Component {
return &FrameItem{
Desc: Desc{
name: name,
form: form,
},
}
}
func (fi *FrameItem) Print() {
fmt.Printf("print %s(%s)\n", fi.Form(), fi.Name())
}
func (fi *FrameItem) Add(Component) {
panic("no implement")
}
func main() {
f := NewFrame("WINDOW窗口", "WinForm")
f.Add(NewFrameItem("LOGO图片", "Picture"))
f.Add(NewFrameItem("登录", "Button"))
f.Add(NewFrameItem("注册", "Button"))
child := NewFrame("Frame1", "Frame")
child.Add(NewFrameItem("用户名", "Label"))
child.Add(NewFrameItem("文本框", "TextBox"))
child.Add(NewFrameItem("密码", "Label"))
child.Add(NewFrameItem("密码框", "PasswordBox"))
child.Add(NewFrameItem("复选框", "CheckBox"))
child.Add(NewFrameItem("记住用户名", "TextBox"))
child.Add(NewFrameItem("忘记密码", "LinkLabel"))
f.Add(child)
f.Print()
}

总结

本周课程主题是代码重构,承接前面课程的OOD目标和原则,以面向对象的设计模式为切入点,分为创建模式、结构模式、行为模式三大类讲解了一些常用的设计模式和应用场景。

创建型模式:抽象实例化过程。

Abstract Factory:提供一个接口以创建一系列相关或相互依赖的对象,而无须指定它们具体的类。

Factory Method:定义一个用户创建对象的接口,让子类决定实例化哪一个类,使一个类的实例化延迟到其子类。

Singleton:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

结构型模式:如何组合类和对象以获取更大的结构。

Adapter:将一个类的接口转换成另外一个接口,使得原本接口不兼容的类可以一起工作。

Composite:将对象组合成树形结构以表示“整体 - 部分”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。

Decorator:动态地给一个对象添加一些额外的职责。就增加的功能来说,Decorator模式相比生成子类更为灵活。

行为型模式:算法和对象间职责的分配。

Template:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

用户头像

Blink

关注

还未添加个人签名 2017.02.09 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 0 期第三周