-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
pattern chain of responsobility done
- Loading branch information
Mykola Kuropatkin
committed
Sep 19, 2018
1 parent
4916ca3
commit f284044
Showing
5 changed files
with
86 additions
and
4 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
Empty file.
51 changes: 51 additions & 0 deletions
51
behavioral/chain_of_resposibility/chain_of_responsibility.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
22
behavioral/chain_of_resposibility/chain_of_responsibility_test.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)) | ||
} |