Golang 设计模式之-装饰模式

trump2018 · · 993 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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()
} 

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:trump2018

查看原文:Golang 设计模式之-装饰模式

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

993 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传