模板方法Golang

模板方法

在模板模式(Template Pattern)中, 定义一个操作中的算法骨架,将算法的一些步骤延迟到子类中,
使得子类在可以不改变该算法结构的情况下重定义该算法的某些特定步骤。
主要解决: 在造房子的时候,地基、走线、水管都一样,只有在建筑的后期才有加壁橱加栅栏等差异

优点 和 缺点

优点:

  1. 封装不变部分, 扩展可变部分.
  2. 父类控制, 子类实现

缺点:

  1. 每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
type FPerson interface {
SetName(name string)
BeforeOut()
Out()
}

type Person struct {
Specific FPerson
name String
}

func (f *Person) SetName(name string) {
p.name = name
}

func (p *Person) BeforeOut() {
if p.Specific == nil {
return
}

p.Specific.BeforeOut()
}

func (p *Person) Out() {
p.BeforeOut()
fmt.Println(p.name + " go out")
}

type Boy struct {
Person
}

func (b *Boy) BeforeOut() {
fmt.Println("boy")
}

type Girl struct {
Person
}

func (g *Girl) BeforeOut() {
fmt.Println("girl")
}

Powered by Hexo and Hexo-theme-hiker

Copyright © 2018 - 2021 Noonde All Rights Reserved.

UV : | PV :