美文网首页
Golang 设计模式之-装饰模式

Golang 设计模式之-装饰模式

作者: trump2018 | 来源:发表于2020-05-06 23:17 被阅读0次

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

    相关文章

      网友评论

          本文标题:Golang 设计模式之-装饰模式

          本文链接:https://www.haomeiwen.com/subject/nqdnghtx.html