首頁  >  文章  >  後端開發  >  函數實作介面時的模式名稱是什麼?

函數實作介面時的模式名稱是什麼?

王林
王林轉載
2024-02-09 20:00:201223瀏覽

函數實作介面時的模式名稱是什麼?

php小編柚子在這裡為大家解答一個常見問題:「函數實作介面時的模式名稱是什麼?」在PHP中,當一個函數實作了一個介面中的所有方法時,這種模式稱為「介面實作模式」或「介面適配器模式」。介面實作模式是一種常見的設計模式,它允許程式設計師透過實作介面來定義一組方法,從而達到程式碼重用和模組化的目的。透過這種模式,我們可以實現介面的多態性,提高程式碼的靈活性和可維護性。無論是在物件導向程式設計或是函數式程式設計中,介面實現模式都是一種重要的技術手段。

問題內容

在go中,我們可以建立實作介面的函數,例如http.handler介面和具體類型http.handlerfunc。我創建了這個模式的另一個簡單範例來計算不同員工的獎金。

type BonusCalculator interface {
    Calculate(salary float64) float64
}

type BonusFunc func(salary float64) float64

func (bonus BonusFunc) Calculate(salary float64) float64 {
    return bonus(salary)
}

var (
    DeveloperBonus BonusFunc = func(salary float64) float64 { return salary*1.5 + 2500.00 }
    ManagerBonus   BonusFunc = func(salary float64) float64 { return salary * 2.0 }
    DirectorBonus  BonusFunc = func(salary float64) float64 { return salary * 3.3 }
)

func CalculateBonus (bonus BonusCalculator, salary float64) float64 {
  return bonus.Calculate(salary)
}

func main() {
    bonus := CalculateBonus(DirectorBonus, 35000.00)
    fmt.Printf("bonus %.2f", bonus)
}


所以上面我們有簡單的 bonusfuncs 實作介面 bonuscalculator 而不是使用結構來做同樣的事情。

這個模式有名字嗎?我在很多地方看到它,但從未找到它的名字。

解決方法

這個模式有名字嗎?我在很多地方看到它,但從未找到它的名字。

是的,這種模式稱為適配器,因為它允許某種「介面」(在本例中為閉包)用作另一種介面(滿足bonuscalculator 的類型)。

在您的範例中,您有一個介面 bonuscalculator

type bonuscalculator interface {
    calculate(salary float64) float64
}

但是,您有func(salary float64) float64 類型的閉包,並且您希望在需要滿足bonusfunc 的類型時能夠傳遞它們,即具有方法 calculate(salary float64) float64 (閉包沒有具有此類名稱的方法,因此它們不滿足bonuscalculator)。

您想要的是將 func(salary float64) float64 改編為 bonuscalculator。因此,您定義了一個新類型 bonusfunc,它是適配器。它將派生自您想要適應的閉包類型,然後透過定義一個方法calculate(salary float64) float64 來滿足bonuscalculator 的要求,該方法只需呼叫底層閉包:

type BonusFunc func(salary float64) float64

func (bonus BonusFunc) Calculate(salary float64) float64 {
    return bonus(salary)
}

bonusfunc適配器;它的存在只是為了適應 func(salary float64) float64 以便滿足 bonuscalculator 介面。現在,每當您將 func(salary float64) float64 指派給 bonusfunc 時,您都會得到一個滿足 bonuscalculator 的值。

以上是函數實作介面時的模式名稱是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除