GoDasturchi
Compose Interfaces

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.

example.go
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.

Hints (0/3)

Key Takeaway

Key Takeaway:

Kichik interfeyslarni ichma-ich joylashtirib (embedding) kattaroq interfeys yaratish mumkin — kichiklik va qulaylik o'rtasida muvozanat.

NEXT UP

Interface Capstone

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

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.

example.go
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.

Hints (0/3)

Key Takeaway

Key Takeaway:

Kichik interfeyslarni ichma-ich joylashtirib (embedding) kattaroq interfeys yaratish mumkin — kichiklik va qulaylik o'rtasida muvozanat.

NEXT UP

Interface Capstone