亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

Go設計模式入門到實踐

Johnny 軟件工程師
難度中級
時長 1小時40分
學習人數
綜合評分9.50
9人評價 查看評價
9.6 內容實用
9.8 簡潔易懂
9.1 邏輯清晰
  • http中間件能比較好體現裝飾模式



    為什么要搞中間件?

    下圖是在hello這個handler中實現了3個功能。但是如果有多個handler,這樣的非業務代碼都要重寫。并且非業務和業務代碼糅合一起。不好!所以


    然后后面就沒聽懂了

    查看全部
  • 上面例子里右邊更好。因為左邊違反了依賴反轉。BMW依賴了v6eng的具體實現。

    查看全部
  • // 測試代碼

    package demo4_1

    import (

    "fmt"

    "testing"

    )

    // 直接創建產品

    func TestProduct_Create(t *testing.T) {

    product1 := Product1{}? ? ? ? // 創建產品1

    product1.SetName("p1")? // 給產品1設置名稱

    name := product1.GetName()? ? // 獲取產品1名稱

    fmt.Println(name)


    product2 := Product2{}

    product2.SetName("p2")

    name2 := product1.GetName()

    fmt.Println(name2)

    }


    // 簡單工廠方式創建

    func TestProductFactory_Create(t *testing.T) {

    factory := ProductFactory{}? ? ? ? ? ? ? ? ?//定義產品工廠,待工廠生產指定類型產品

    product1 := factory.Create(p1)? ? ? ? ? ? ? // 工廠根據指定,生產產品1

    product1.SetName("p1")? ? ? ? ? ? ? ? // 給產品1設置名稱

    name := product1.GetName()? ? ? ? ? ? ? ? ? // 獲取產品1名稱

    fmt.Println(name)


    product2 := factory.Create(p2)

    product2.SetName("p2")

    name2 := product2.GetName()

    fmt.Println(name2)

    }

    查看全部
  • // 課程代碼

    package demo4_1

    // Product 實現一個產品抽象

    type Product interface {

    SetName(name string) // 設置產品名稱

    GetName() string? ? ?// 獲取產品名稱

    }


    // Product1 實現具體的產品:產品1,他有兩個方法

    type Product1 struct {

    Name string // 產品1的名稱

    }


    // SetName 設置產品名稱

    func (p1 *Product1) SetName(name string) {

    p1.Name = name

    }


    // GetName 獲取產品名稱

    func (p1 *Product1) GetName() string {

    return "產品1的name為:" + p1.Name

    }


    // Product2 實現具體的產品:產品2,他有兩個方法

    type Product2 struct {

    Name string // 產品1的名稱

    }


    // SetName 設置產品名稱

    func (p2 *Product2) SetName(name string) {

    p2.Name = name

    }


    // GetName 獲取產品名稱

    func (p2 *Product2) GetName() string {

    return "產品1的name為:" + p2.Name

    }


    type productType int // 產品類型變量

    const (

    p1 productType = iota // 0

    p2? ? ? ? ? ? ? ? ? ? // 1

    )


    // ProductFactory 實現簡單工廠類

    type ProductFactory struct {

    }


    // Create 產品工廠根據傳入的產品類型,創建出具體產品實現。

    func (pf *ProductFactory) Create(productType productType) Product {

    if productType == p1 {

    return &Product1{}

    }

    if productType == p2 {

    return &Product2{}

    }

    return nil

    }


    查看全部
  • 設計模式分類

    查看全部
  • 策略模式總結

    查看全部
  • 設計模式=武功招式

    算法數據結構=內功

    常見設計模式

    查看全部
  • 面向對象要有三大特征

    設計代碼時遵循五大原則

    查看全部
  • 結構嵌套結構依賴于具體的實現

    結構嵌套方法依賴于接口

    BM嵌套v6Engine,車里只有一種具體的引擎

    BM嵌入engine接口,車里可以安裝不同的引擎符合依賴反轉原則

    查看全部
  • 單一功能原則

    作圖如果有三輪車新加入要重新定義三輪車結構和方法不對已經實現的Car和bike做修改符合開閉原則

    go的接口自動符合里氏替換

    查看全部
  • 為什么學設計模式?

    程序員的一種術語方便交流

    提高代碼質量提高可復用可擴展性解耦


    查看全部
    0 采集 收起 來源:課程介紹

    2020-08-12

  • 設計模式分類

    查看全部
  • 里氏替換:子類可以替換父類 意義:用抽象完成代碼,而不是具體實現。
    查看全部
  • 開閉:對擴展開放,對修改關閉
    查看全部
  • 我的筆記打掃

    查看全部
    0 采集 收起 來源:課程介紹

    2020-05-12

首頁上一頁12下一頁尾頁

舉報

0/150
提交
取消
課程須知
本課程不是GO語言基礎入門課程,需要同學們熟悉GO相關基礎語法,如有面向對象相關開發經驗最佳。
老師告訴你能學到什么?
1、掌握Go OOP編程,包括三大基本特性、五大基本原則 2、熟悉簡單工廠模式、工廠方法模式的區別和應用 3、熟悉裝飾模式的應用 4、熟悉策略模式的應用

微信掃碼,參與3人拼團

微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

友情提示:

您好,此課程屬于遷移課程,您已購買該課程,無需重復購買,感謝您對慕課網的支持!