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 {
// example resource
resource string
}
var instance *singleton
var once sync.Once
// GetInstance returns the single instance of the singleton class
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) // Output: Initialized Resource
secondInstance := GetInstance()
fmt.Println(firstInstance == secondInstance) // Output: true
}
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.