學習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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM