observer

package
v0.0.0-...-6db54d9 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 15, 2021 License: MIT Imports: 0 Imported by: 0

README

Наблюдатель (Observer)

Паттерн Observer относится к поведенческим паттернам уровня объекта.

Паттерн Observer определяет зависимость "один-ко-многим" между объектами так, что при изменении состояния одного объекта все зависящие от него объекты уведомляются об этом и обновляются автоматически.

Основные участиники паттерна это Издатели (Subject) и Подписчики (Observer).

Имеется два способа получения уведомлений от издателя:

  1. Метод вытягивания: После получения уведомления от издателя, подписчик должен пойти к издателю и забрать (вытянуть) данные самостоятельно.
  2. Метод проталкивания: Издатель не уведомляет подписчика об обновлениях данных, а самостоятельно доставляет (проталкивает) данные подписчику.

Требуется для реализации:

  1. Абстрактный класс Subject, определяющий интерфейс Издателя;
  2. Класс ConcreteSubject, реализует интерфейс Subject;
  3. Абстрактный класс Observer, определяющий общий функционал Подписчиков;
  4. Класс ConcreteObserver, реализует Подписчика;

[!] В описании паттерна применяются общие понятия, такие как Класс, Объект, Абстрактный класс. Применимо к языку Go, это Пользовательский Тип, Значение этого Типа и Интерфейс. Также в языке Go за место общепринятого наследования используется агрегирование и встраивание.

-- THE END --

Documentation

Overview

Package observer is an example of the Observer Pattern. Push model.

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type ConcreteObserver

type ConcreteObserver struct {
	// contains filtered or unexported fields
}

ConcreteObserver implements the Observer interface.

func (*ConcreteObserver) Update

func (s *ConcreteObserver) Update(state string)

Update set new state

type ConcretePublisher

type ConcretePublisher struct {
	// contains filtered or unexported fields
}

ConcretePublisher implements the Publisher interface.

func (*ConcretePublisher) Attach

func (s *ConcretePublisher) Attach(observer Observer)

Attach a Observer

func (*ConcretePublisher) Notify

func (s *ConcretePublisher) Notify()

Notify sends notifications to subscribers. Push model.

func (*ConcretePublisher) SetState

func (s *ConcretePublisher) SetState(state string)

SetState sets new state

type Observer

type Observer interface {
	Update(state string)
}

Observer provides a subscriber interface.

Example
publisher := NewPublisher()

publisher.Attach(&ConcreteObserver{})
publisher.Attach(&ConcreteObserver{})
publisher.Attach(&ConcreteObserver{})

publisher.SetState("New State...")

publisher.Notify()

type Publisher

type Publisher interface {
	Attach(observer Observer)
	SetState(state string)
	Notify()
}

Publisher interface.

func NewPublisher

func NewPublisher() Publisher

NewPublisher is the Publisher constructor.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL