#17.3 golang Композиция интерфейсов
Primary tabs
Forums:
Интерфейсы, как и структуры поддерживают композицию.
Мы можем встраивать один интерфейс в другой, тем самым образуя более сложные интерфейсы и создавая композиции интерфейсов.
Давайте рассмотрим пример:
// интерфейс "Платильщник"
type Payer interface {
Pay(int) error
}
// интерфейс "Звонильщик"
type Ringer interface {
Ring(string) error
}
type NFCPhone interface {
// частично возьмем методы из композиации:
Payer
Ringer
// и добавим еще один свой метод:
sayHello()
}
type MyPhone struct {
number int
}
// навесим методы для соответствия NFCPhone
func (*MyPhone) Pay(amount int) error {
return nil
}
func (*MyPhone) Ring(name string) error {
return nil
}
func (*MyPhone) sayHello() {
fmt.Println("Привет!")
}
// Функция принимающая тип композитного интерфейса
func testIt(phone NFCPhone) {
phone.sayHello()
}
func main() {
phone := &MyPhone{
number: 1,
}
testIt(phone)
}
-- тут мы:
- Объявляем интерфейс «Плательщик», который требует метод Pay.
- И интерфейс «Звонильщик», который требует метод «позвонить».
- Далее мы объявляем композитный (составной) интерфейс NFCPhone, то есть телефон, который реализует метод «бесконтактная оплата через NFC-технологию».
Этот интерфейс NFCPhone образован композицией двух других интерфейсов: «Плательщик» и «Звонильщик». Получается, что на самом деле интерфейс выглядит вот так:
type NFCPhone interface {
Pay(int) error
Ring(string) error
}
-- плюсом к этому мы добавили еще метод sayHello(), чтобы показать, что можно использовать не только композицию, но и одновременно с ней объявлять методы "на месте".
- Log in to post comments
- 47 reads