mirror of
https://github.com/tmrts/go-patterns.git
synced 2026-02-04 14:46:19 +00:00
Add singleton creational pattern
This commit is contained in:
35
creational/singleton.md
Normal file
35
creational/singleton.md
Normal file
@@ -0,0 +1,35 @@
|
||||
#Singleton Pattern
|
||||
Singleton creational design pattern restricts the instantiation of a type to a single object.
|
||||
|
||||
## Implementation
|
||||
```go
|
||||
package singleton
|
||||
|
||||
type singleton map[string]string
|
||||
|
||||
var once sync.Once
|
||||
|
||||
var instance *singleton
|
||||
|
||||
func New() *singleton {
|
||||
once.Do(func() {
|
||||
instance = make(singleton)
|
||||
})
|
||||
|
||||
return instance
|
||||
}
|
||||
```
|
||||
|
||||
## Usage
|
||||
```go
|
||||
s := singleton.New()
|
||||
|
||||
s["this"] = "that"
|
||||
|
||||
s2 := singleton.New()
|
||||
|
||||
// s2["this"] == "that"
|
||||
```
|
||||
|
||||
## Rules of Thumb
|
||||
- Singleton pattern represents a global state and most of the time reduces testability.
|
||||
Reference in New Issue
Block a user