Golang 设计模式之-装饰模式
最近在温习设计模式,虽然面向对象不是go的特长,但用go实现的设计模式,比java 和 c# 这种纯面向对象语言多了一份灵活,比python 这种虚假的面向对象要更直观, 性能上也更有优势.
装饰模式
装饰模式是一个非常常用的设计模式。常用到python内置了它。
装饰模式是为已有功能动态的添加更多功能的一种方式, 降低了主类(当然,go里没有类这种东西,可以用结构模拟)复杂度, 防止类的爆炸行为.
当新加的功能仅仅是满足某种特定条件下的需要时,装饰模式是个非常好的选择。
装饰模式把核心功能和装饰功能区分了,减少了核心功能可能造成的冗余和耦合,简化核心类的重复装饰逻辑.
装饰模式的装饰顺序很重要,它决定了最终类被装饰的效果
实例
- Decorate 抽象
type IDecorate interface {
Do()
}
type Decorate struct {
decorate IDecorate
}
func (c *Decorate) DecorateFun(i IDecorate) {
c.decorate = i
}
func (c *Decorate) Do() {
if c.decorate != nil {
c.decorate.Do()
}
}
- implement of Decorate
具体decorate 实现
type DecorateA struct {
Base Decorate
}
func (c *DecorateA) Do() {
fmt.Printf("run A decorate")
c.Base.Do()
}
type DecorateB struct {
Base Decorate
}
func (c *DecorateB) Do() {
fmt.Printf("run B decorate")
c.Base.Do()
}
- call it
func main() {
a := new(DecorateA)
b := new(DecorateB)
b.Base.DecorateFun(a)
b.Do()
}
有疑问加站长微信联系(非本文作者)