-
http中間件能比較好體現(xiàn)裝飾模式
為什么要搞中間件?
下圖是在hello這個(gè)handler中實(shí)現(xiàn)了3個(gè)功能。但是如果有多個(gè)handler,這樣的非業(yè)務(wù)代碼都要重寫(xiě)。并且非業(yè)務(wù)和業(yè)務(wù)代碼糅合一起。不好!所以
然后后面就沒(méi)聽(tīng)懂了
查看全部 -
上面例子里右邊更好。因?yàn)樽筮呥`反了依賴反轉(zhuǎn)。BMW依賴了v6eng的具體實(shí)現(xiàn)。
查看全部 -
// 測(cè)試代碼
package demo4_1
import (
"fmt"
"testing"
)
// 直接創(chuàng)建產(chǎn)品
func TestProduct_Create(t *testing.T) {
product1 := Product1{}? ? ? ? // 創(chuàng)建產(chǎn)品1
product1.SetName("p1")? // 給產(chǎn)品1設(shè)置名稱
name := product1.GetName()? ? // 獲取產(chǎn)品1名稱
fmt.Println(name)
product2 := Product2{}
product2.SetName("p2")
name2 := product1.GetName()
fmt.Println(name2)
}
// 簡(jiǎn)單工廠方式創(chuàng)建
func TestProductFactory_Create(t *testing.T) {
factory := ProductFactory{}? ? ? ? ? ? ? ? ?//定義產(chǎn)品工廠,待工廠生產(chǎn)指定類型產(chǎn)品
product1 := factory.Create(p1)? ? ? ? ? ? ? // 工廠根據(jù)指定,生產(chǎn)產(chǎn)品1
product1.SetName("p1")? ? ? ? ? ? ? ? // 給產(chǎn)品1設(shè)置名稱
name := product1.GetName()? ? ? ? ? ? ? ? ? // 獲取產(chǎn)品1名稱
fmt.Println(name)
product2 := factory.Create(p2)
product2.SetName("p2")
name2 := product2.GetName()
fmt.Println(name2)
}
查看全部 -
// 課程代碼
package demo4_1
// Product 實(shí)現(xiàn)一個(gè)產(chǎn)品抽象
type Product interface {
SetName(name string) // 設(shè)置產(chǎn)品名稱
GetName() string? ? ?// 獲取產(chǎn)品名稱
}
// Product1 實(shí)現(xiàn)具體的產(chǎn)品:產(chǎn)品1,他有兩個(gè)方法
type Product1 struct {
Name string // 產(chǎn)品1的名稱
}
// SetName 設(shè)置產(chǎn)品名稱
func (p1 *Product1) SetName(name string) {
p1.Name = name
}
// GetName 獲取產(chǎn)品名稱
func (p1 *Product1) GetName() string {
return "產(chǎn)品1的name為:" + p1.Name
}
// Product2 實(shí)現(xiàn)具體的產(chǎn)品:產(chǎn)品2,他有兩個(gè)方法
type Product2 struct {
Name string // 產(chǎn)品1的名稱
}
// SetName 設(shè)置產(chǎn)品名稱
func (p2 *Product2) SetName(name string) {
p2.Name = name
}
// GetName 獲取產(chǎn)品名稱
func (p2 *Product2) GetName() string {
return "產(chǎn)品1的name為:" + p2.Name
}
type productType int // 產(chǎn)品類型變量
const (
p1 productType = iota // 0
p2? ? ? ? ? ? ? ? ? ? // 1
)
// ProductFactory 實(shí)現(xiàn)簡(jiǎn)單工廠類
type ProductFactory struct {
}
// Create 產(chǎn)品工廠根據(jù)傳入的產(chǎn)品類型,創(chuàng)建出具體產(chǎn)品實(shí)現(xiàn)。
func (pf *ProductFactory) Create(productType productType) Product {
if productType == p1 {
return &Product1{}
}
if productType == p2 {
return &Product2{}
}
return nil
}
查看全部 -
設(shè)計(jì)模式分類
查看全部 -
策略模式總結(jié)
查看全部 -
設(shè)計(jì)模式=武功招式
算法數(shù)據(jù)結(jié)構(gòu)=內(nèi)功
常見(jiàn)設(shè)計(jì)模式
查看全部 -
面向?qū)ο笠腥筇卣?/p>
設(shè)計(jì)代碼時(shí)遵循五大原則
查看全部 -
結(jié)構(gòu)嵌套結(jié)構(gòu)依賴于具體的實(shí)現(xiàn)
結(jié)構(gòu)嵌套方法依賴于接口
BM嵌套v6Engine,車?yán)镏挥幸环N具體的引擎
BM嵌入engine接口,車?yán)锟梢园惭b不同的引擎符合依賴反轉(zhuǎn)原則
查看全部 -
單一功能原則
作圖如果有三輪車新加入要重新定義三輪車結(jié)構(gòu)和方法不對(duì)已經(jīng)實(shí)現(xiàn)的Car和bike做修改符合開(kāi)閉原則
go的接口自動(dòng)符合里氏替換
查看全部 -
為什么學(xué)設(shè)計(jì)模式?
程序員的一種術(shù)語(yǔ)方便交流
提高代碼質(zhì)量提高可復(fù)用可擴(kuò)展性解耦
查看全部 -
設(shè)計(jì)模式分類
查看全部 -
里氏替換:子類可以替換父類 意義:用抽象完成代碼,而不是具體實(shí)現(xiàn)。查看全部
-
開(kāi)閉:對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉查看全部
-
我的筆記打掃
查看全部
舉報(bào)