作者iLeyaSin365 (365)
看板heart
标题[闲聊] 和copilot 谈接口概念与它举的比喻
时间Sun Feb 16 00:32:47 2025
当然可以!以下是两个例子来说明接口和实现的概念。
### 范例一:咖哩块
我们可以将咖哩块视为一个接口,不同的品牌和种类的咖哩块则是这个接口的具体实现。
#### 接口
假设我们有一个 `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` 接口,我们
就可以使用相同的方式来操作和享受不同类型的游戏。
这两个例子都展示了接口如何定义共用行为,使得不同的具体实现能够被统一操作和管理,
从而提高系统的灵活性和扩展性。如果有任何其他问题或需要更多例子,随时告诉我!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.83.53.233 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/heart/M.1739637169.A.804.html