Compose Interfaces
Interfeyslarni kompozitsiya qilish
Kichik interfeyslarni alohida-alohida yaratib, keyin ularni kattaroq interfeysga birlashtirish (embedding) mumkin — bu "Keep Interfaces Small" bilan "kerak bo'lganda kattaroq imkoniyat" o'rtasida muvozanat topadi.
package main
import "fmt"
type Reader interface {
Read() string
}
type Writer interface {
Write(s string)
}
// Kompozitsiya: ikkita kichik interfeysni birlashtirish
type ReadWriter interface {
Reader
Writer
}
type MemStore struct {
data string
}
func (m *MemStore) Read() string { return m.data }
func (m *MemStore) Write(s string) { m.data = s }
func use(rw ReadWriter) {
rw.Write("salom")
fmt.Println(rw.Read())
}
func main() {
m := &MemStore{}
use(m)
}ReadWriter interfeys ichiga Reader va Writerni nomi bilan joylashtirish — ularning barcha metodlarini avtomatik meros qilib oladi (xuddi struct embedding kabi, "Composite Types" kursida ko'rgan). Bu — standart kutubxonadagi haqiqiy io.ReadWriter aynan shunday quriladi. Foyda: kichik interfeyslarni alohida ishlatish (faqat Reader kerak bo'lsa) yoki birlashtirilganini ishlatish (ReadWriter kerak bo'lsa) — ikkalasi ham mavjud, hech narsa takrorlanmaydi.
>_ Exercise
Ikkita kichik interfeysni kattaroqqa birlashtiring.
- •Starter va Stopper interfeyslarini (Start()/Stop() metodlari bilan) yozing
- •Runnable interfeysini ikkalasini birlashtirib yarating
- •Server struct'i (Start/Stop metodlari bilan) yozing va Runnable orqali ishlating
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Kichik interfeyslarni ichma-ich joylashtirib (embedding) kattaroq interfeys yaratish mumkin — kichiklik va qulaylik o'rtasida muvozanat.
NEXT UP
Interface Capstone
$ go run main.go
Kodingizni ishga tushiring