[閒聊] 和copilot 談接口概念與它舉的比喻

作者: iLeyaSin365 (伊雷雅鑫)   2025-02-16 00:32:47
當然可以!以下是兩個例子來說明接口和實現的概念。
### 範例一:咖哩塊
我們可以將咖哩塊視為一個接口,不同的品牌和種類的咖哩塊則是這個接口的具體實現。
#### 接口
假設我們有一個 `CurryBlock` 接口,定義了製作咖哩塊所需的基本行為:
```go
package main
import "fmt"
// 定義 CurryBlock 接口
type CurryBlock interface {
AddIngredients()
Stir()
Serve()
}
```
#### 實現
不同的咖哩塊品牌和種類,如日式咖哩塊、印度咖哩塊,實現了 `CurryBlock` 接口,提供
了具體的製作過程。
```go
// 實現 JapaneseCurryBlock 結構
type JapaneseCurryBlock struct {
Brand string
}
func (jc JapaneseCurryBlock) AddIngredients() {
fmt.Println("Adding ingredients for Japanese Curry.")
}
func (jc JapaneseCurryBlock) Stir() {
fmt.Println("Stirring Japanese Curry.")
}
func (jc JapaneseCurryBlock) Serve() {
fmt.Println("Serving Japanese Curry.")
}
// 實現 IndianCurryBlock 結構
type IndianCurryBlock struct {
Brand string
}
func (ic IndianCurryBlock) AddIngredients() {
fmt.Println("Adding ingredients for Indian Curry.")
}
func (ic IndianCurryBlock) Stir() {
fmt.Println("Stirring Indian Curry.")
}
func (ic IndianCurryBlock) Serve() {
fmt.Println("Serving Indian Curry.")
}
```
#### 結果
通過這樣的接口設計,無論是日式咖哩塊還是印度咖哩塊,只要它們實現了 `CurryBlock`
接口,我們就可以使用相同的方式來製作和享用不同風味的咖哩。
### 範例二:遊戲類型
我們可以將遊戲類型視為一個接口,不同的遊戲則是這個接口的具體實現。
#### 接口
假設我們有一個 `Game` 接口,定義了遊戲的基本行為:
```go
package main
import "fmt"
// 定義 Game 接口
type Game interface {
Start()
Play()
End()
}
```
#### 實現
不同的遊戲類型,如射擊遊戲、益智遊戲,實現了 `Game` 接口,提供了具體的遊戲過程。
```go
// 實現 ShooterGame 結構
type ShooterGame struct {
Title string
}
func (sg ShooterGame) Start() {
fmt.Println("Starting Shooter Game.")
}
func (sg ShooterGame) Play() {
fmt.Println("Playing Shooter Game.")
}
func (sg ShooterGame) End() {
fmt.Println("Ending Shooter Game.")
}
// 實現 PuzzleGame 結構
type PuzzleGame struct {
Title string
}
func (pg PuzzleGame) Start() {
fmt.Println("Starting Puzzle Game.")
}
func (pg PuzzleGame) Play() {
fmt.Println("Playing Puzzle Game.")
}
func (pg PuzzleGame) End() {
fmt.Println("Ending Puzzle Game.")
}
```
#### 結果
通過這樣的接口設計,無論是射擊遊戲還是益智遊戲,只要它們實現了 `Game` 接口,我們
就可以使用相同的方式來操作和享受不同類型的遊戲。
這兩個例子都展示了接口如何定義共用行為,使得不同的具體實現能夠被統一操作和管理,
從而提高系統的靈活性和擴展性。如果有任何其他問題或需要更多例子,隨時告訴我!

Links booklink

Contact Us: admin [ a t ] ucptt.com