-
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的接口自動符合里氏替換
查看全部 -
為什么學設計模式?
程序員的一種術語方便交流
提高代碼質量提高可復用可擴展性解耦
查看全部 -
設計模式分類
查看全部 -
里氏替換:子類可以替換父類 意義:用抽象完成代碼,而不是具體實現。查看全部
-
開閉:對擴展開放,對修改關閉查看全部
-
我的筆記打掃
查看全部
舉報