implemented singleton pattern
This commit is contained in:
parent
771a74e3c4
commit
6e66e82290
12
.gitignore
vendored
12
.gitignore
vendored
@ -1,14 +1,2 @@
|
|||||||
# Binaries for programs and plugins
|
# Binaries for programs and plugins
|
||||||
*.exe
|
*.exe
|
||||||
*.dll
|
|
||||||
*.so
|
|
||||||
*.dylib
|
|
||||||
|
|
||||||
# Test binary, build with `go test -c`
|
|
||||||
*.test
|
|
||||||
|
|
||||||
# Output of the go coverage tool, specifically when used with LiteIDE
|
|
||||||
*.out
|
|
||||||
|
|
||||||
# Project-local glide cache, RE: https://github.com/Masterminds/glide/issues/736
|
|
||||||
.glide/
|
|
||||||
|
@ -1,2 +1,8 @@
|
|||||||
# golang-design-patterns
|
# golang-design-patterns
|
||||||
Implementation of design patterns in Golang
|
Implementation of design patterns in Golang
|
||||||
|
|
||||||
|
|
||||||
|
### Table of contents
|
||||||
|
**[Creational Patterns](#creational-patterns)**<br>
|
||||||
|
**[Structural Patterns](#structural-patterns)**<br>
|
||||||
|
**[Behavioral Patterns](#behavioral-patterns)**<br>
|
24
creational/singleton/singleton.go
Normal file
24
creational/singleton/singleton.go
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
package singleton
|
||||||
|
|
||||||
|
type Singleton interface {
|
||||||
|
AddOne() int
|
||||||
|
}
|
||||||
|
|
||||||
|
type singleton struct {
|
||||||
|
count int
|
||||||
|
}
|
||||||
|
|
||||||
|
var instance *singleton
|
||||||
|
|
||||||
|
func GetInstance() Singleton {
|
||||||
|
if instance == nil {
|
||||||
|
instance = new(singleton)
|
||||||
|
}
|
||||||
|
|
||||||
|
return instance
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *singleton) AddOne() int {
|
||||||
|
s.count++
|
||||||
|
return s.count
|
||||||
|
}
|
29
creational/singleton/singleton_test.go
Normal file
29
creational/singleton/singleton_test.go
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
package singleton
|
||||||
|
|
||||||
|
import "testing"
|
||||||
|
|
||||||
|
func TestGetInstance(t *testing.T) {
|
||||||
|
|
||||||
|
firstCounter := GetInstance()
|
||||||
|
|
||||||
|
if firstCounter == nil {
|
||||||
|
t.Error("Expected pointer to Singleton after calling GetInstance(), not nil")
|
||||||
|
}
|
||||||
|
|
||||||
|
expectedCounter := firstCounter
|
||||||
|
|
||||||
|
count := firstCounter.AddOne()
|
||||||
|
if count != 1 {
|
||||||
|
t.Errorf("After calling for the first time to count, the count must be 1 but it is %d\n", count)
|
||||||
|
}
|
||||||
|
|
||||||
|
secondCounter := GetInstance()
|
||||||
|
if secondCounter != expectedCounter {
|
||||||
|
t.Error("Expected same counter in secondCounter but got different instance")
|
||||||
|
}
|
||||||
|
|
||||||
|
count = secondCounter.AddOne()
|
||||||
|
if count != 2 {
|
||||||
|
t.Errorf("After calling AddOne in second counter, count must be 2 but was $d\n", count)
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user