• 学习Go语言之装饰器模式


    一,首先理解装饰器模式:动态的给一个对象增加一些额外的职责,这是在软件设计原则上面,一个功能装饰另一个功能,每个功能遵循同一个接口是这个模式的特征。

    二,定义对象接口和装饰抽象类

     1 type IDecorate interface {
     2     Do()
     3 }
     4 
     5 // 装饰器。实现接口,又定义了自己的事件DecorateFun,相当于抽象类
     6 type Decorate struct {
     7     // 待装饰的抽象类
     8     decorate IDecorate
     9 }
    10 
    11 func (c *Decorate) DecorateFun(i IDecorate) {
    12     c.decorate = i
    13 }
    14 
    15 func (c *Decorate) Do() {
    16     if c.decorate != nil {
    17         c.decorate.Do()
    18     }
    19 }

    三,具体的装饰类

     1 // 具体A装饰
     2 type DecorateA struct {
     3     Base Decorate
     4 }
     5 
     6 // 重写方法,隐式实现接口
     7 func (c *DecorateA) Do() {
     8     fmt.Printf("执行A装饰")
     9     c.Base.Do()
    10 }
    11 
    12 // 具体B装饰
    13 type DecorateB struct {
    14     Base Decorate
    15 }
    16 
    17 // 重写方法,隐式实现接口
    18 func (c *DecorateB) Do() {
    19     fmt.Printf("执行B装饰")
    20     c.Base.Do()
    21 }
    22 
    23 // 具体C装饰
    24 type DecorateC struct {
    25     Base Decorate
    26 }
    27 
    28 // 重写方法,隐式实现接口
    29 func (c *DecorateC) Do() {
    30     fmt.Printf("执行C装饰")
    31     c.Base.Do()
    32 }

    四,客户端调用。此处需要注意避免贪吃蛇无限循环问题

    1 func main() {
    2     a := new(DecorateA)
    3     b := new(DecorateB)
    4     c := new(DecorateC)
    5     b.Base.DecorateFun(a)
    6     c.Base.DecorateFun(b)
    7     c.Do()
    8 }

  • 相关阅读:
    将一个正整数分解质因数
    C语言中字符数组和字符串、字符串常量(转载)
    输出那一天是星期几
    吸血鬼数字—THINKING IN JAVA中一道习题
    Oracle外连接,左外连接,右外连接,内连接简析
    函数基础篇 Zeus
    程序员从初级到中级10个秘诀
    帮你免于失业的十大软件技术
    入门级XML学习(二)
    入门级XML学习(一)
  • 原文地址:https://www.cnblogs.com/shi2310/p/11416410.html
Copyright © 2020-2023  润新知