| name | gof-singleton-pattern |
| description | Implements the Singleton design pattern ensuring a class has only one instance while providing a global point of access to it. |
| license | MIT |
| compatibility | opencode |
| metadata | {"version":"1.0.0","domain":"architecture","triggers":"singleton pattern, ensure single instance, global access, gof patterns","archetypes":["educational"],"anti_triggers":["brainstorming","vague ideation"],"response_profile":{"verbosity":"low","directive_strength":"high","abstraction_level":"operational"},"role":"implementation","scope":"implementation","output-format":"code","related-skills":"gof-factory-pattern, gof-strategy-pattern"} |
Singleton Pattern
archetypes: implementation, educational
anti_triggers: allowing multiple instances
response_profile:
verbosity: medium
directive_strength: high
abstraction_level: tactical
Implements the Singleton design pattern ensuring a class has only one instance while providing a global point of access to it.
When to Use
The When to Use section should detail under what circumstances this skill is applicable by incorporating the following:
Archetypes
- Implementation: Aims to guide developers in implementing the Singleton pattern effectively.
- Educational: Educates the user on the implications and benefits of the Singleton pattern in their projects.
Anti-Triggers
- Allowing multiple instances: This skill should avoid contexts where discussions around multiple instances occur without justification.
Response Profile
-
Verbosity: Medium
-
Directive Strength: High
-
Abstraction Level: Tactical
-
When exactly one instance of a class is needed.
-
When it’s critical to control the access to that instance globally.
-
When the instance should run in a multithreaded environment without data corruption.
Core Workflow
- Define the Class: Create a private constructor to prevent direct initialization.
- Static Method: Implement a static method that provides access to the instance, creating it if necessary.
- Provide Thread Safety: Ensure the method is thread-safe to prevent multiple instances in concurrent environments.
Implementation Patterns
Thread-Safe Singleton Pattern
package main
import (
"sync"
)
type singleton struct {
resource string
}
var instance *singleton
var once sync.Once
func GetInstance() *singleton {
once.Do(func() {
instance = &singleton{resource: "Initialized Resource"}
})
return instance
}
Example Usage
package main
import (
"fmt"
)
func main() {
firstInstance := GetInstance()
fmt.Println(firstInstance.resource)
secondInstance := GetInstance()
fmt.Println(firstInstance == secondInstance)
}
Constraints
MUST DO
- Ensure only one instance is created throughout the application.
- Initialize the instance lazily (only when it’s needed).
MUST NOT DO
- Allow public instantiation of the class.
- Create new instances within your application logic directly.