Skip to content

Commit

Permalink
pattern chain of responsobility done
Browse files Browse the repository at this point in the history
  • Loading branch information
Mykola Kuropatkin committed Sep 19, 2018
1 parent 4916ca3 commit f284044
Show file tree
Hide file tree
Showing 5 changed files with 86 additions and 4 deletions.
3 changes: 0 additions & 3 deletions .idea/dictionaries/nick.xml

This file was deleted.

Empty file added behavioral/README.md
Empty file.
51 changes: 51 additions & 0 deletions behavioral/chain_of_resposibility/chain_of_responsibility.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
// Паттерн Цепочка ответственности (Chain Of Responsibility)
//

package chain_of_responsibility

// Тип Handler, описывает интерфейс обработчиков в цепочки
type Handler interface {
SendRequest(message int) string
}

// Тип ConcreteHandlerA, реализует обработчик "A"
type ConcreteHandlerA struct {
Next Handler
}

func (self *ConcreteHandlerA) SendRequest(message int) (result string) {
if message == 1 {
result = "Im handler 1"
} else if self.Next != nil {
result = self.Next.SendRequest(message)
}
return
}

// Тип ConcreteHandlerB, реализует обработчик "B"
type ConcreteHandlerB struct {
Next Handler
}

func (self *ConcreteHandlerB) SendRequest(message int) (result string) {
if message == 2 {
result = "Im handler 2"
} else if self.Next != nil {
result = self.Next.SendRequest(message)
}
return
}

// Тип ConcreteHandlerC, реализует обработчик "C"
type ConcreteHandlerC struct {
Next Handler
}

func (self *ConcreteHandlerC) SendRequest(message int) (result string) {
if message == 3 {
result = "Im handler 3"
} else if self.Next != nil {
result = self.Next.SendRequest(message)
}
return
}
22 changes: 22 additions & 0 deletions behavioral/chain_of_resposibility/chain_of_responsibility_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package chain_of_responsibility

import (
"testing"
)

func TestChainOfResponsibility(t *testing.T) {

expect := "Im handler 2"

handlers := &ConcreteHandlerA{
Next:&ConcreteHandlerB{
Next:&ConcreteHandlerC{},
},
}

result := handlers.SendRequest(2)

if result != expect {
t.Errorf("Expect result to equal %s, but %s.\n", expect, result)
}
}
14 changes: 13 additions & 1 deletion main.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,17 @@
package main

import (
"fmt"
"github.com/NickTaporuk/golang_patterns/behavioral/chain_of_resposibility"
)

func main() {


handlers := &chain_of_responsibility.ConcreteHandlerA{
Next:&chain_of_responsibility.ConcreteHandlerB{
Next:&chain_of_responsibility.ConcreteHandlerC{},
},
}

fmt.Println(handlers.SendRequest(4))
}

0 comments on commit f284044

Please sign in to comment.