implemented singleton pattern

This commit is contained in:
ismayilmalik 2017-12-31 20:57:02 +03:00
parent 771a74e3c4
commit 6e66e82290
4 changed files with 59 additions and 12 deletions

12
.gitignore vendored
View File

@ -1,14 +1,2 @@
# Binaries for programs and plugins
*.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/

View File

@ -1,2 +1,8 @@
# golang-design-patterns
Implementation of design patterns in Golang
### Table of contents
**[Creational Patterns](#creational-patterns)**<br>
**[Structural Patterns](#structural-patterns)**<br>
**[Behavioral Patterns](#behavioral-patterns)**<br>

View 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
}

View 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)
}
}