chain_of_responsibility

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

Цепочка ответственности (Chain Of Responsibility)

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

Паттерн Chain Of Responsibility позволяет избежать привязки объекта-отправителя запроса к объекту-получателю запроса, при этом давая шанс обработать этот запрос нескольким объектам. Получатели связываются в цепочку, и запрос передается по цепочке, пока не будет обработан каким-то объектом.

По сути это цепочка обработчиков, которые по очереди получают запрос, а затем решают, обрабатывать его или нет. Если запрос не обработан, то он передается дальше по цепочке. Если же он обработан, то паттерн сам решает передавать его дальше или нет. Если запрос не обработан ни одним обработчиком, то он просто теряется.

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

  1. Базовый абстрактный класс Handler, описывающий интерфейс обработчиков в цепочки;
  2. Класс ConcreteHandlerA, реализующий конкретный обработчик A;
  3. Класс ConcreteHandlerB, реализующий конкретный обработчик B;
  4. Класс ConcreteHandlerC, реализующий конкретный обработчик C;

Обратите внимание, что вместо хранения ссылок на всех кандидатов-получателей запроса, каждый отправитель хранит единственную ссылку на начало цепочки, а каждый получатель имеет единственную ссылку на своего преемника - последующий элемент в цепочке.

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

-- THE END --

Documentation

Overview

Package chain_of_responsibility is an example of the Chain Of Responsibility Pattern.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type ConcreteHandlerA

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

ConcreteHandlerA implements handler "A".

func (*ConcreteHandlerA) SendRequest

func (h *ConcreteHandlerA) SendRequest(message int) (result string)

SendRequest implementation.

type ConcreteHandlerB

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

ConcreteHandlerB implements handler "B".

func (*ConcreteHandlerB) SendRequest

func (h *ConcreteHandlerB) SendRequest(message int) (result string)

SendRequest implementation.

type ConcreteHandlerC

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

ConcreteHandlerC implements handler "C".

func (*ConcreteHandlerC) SendRequest

func (h *ConcreteHandlerC) SendRequest(message int) (result string)

SendRequest implementation.

type Handler

type Handler interface {
	SendRequest(message int) string
}

Handler provides a handler interface.

Jump to

Keyboard shortcuts

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