Aug
18
2010
18
2010
Design Patterns : Singleton
Motivation
It is important for some classes to have exactly one instance. As an example although there can be many printers in a system, there should be only one printer spooler. How do we ensure that a class has only one instance and that the instance is easily accessible within the network?
Intent
- To ensure that a class has only one instance, and to provide a global point of access to it.
- Regardless of the mechanics, the value of Singleton lies in centralizing authority in a single object.
Applicability
Use Singleton pattern when
- There must be exactly one instance of a class, and it must be accessible to clients from a well-known access point.
- When the sole instance should be extensible by sub-classing, and clients should be able to use an extended instance without modifying their code.
Why is it a Responsibility Pattern?
Objects can usually act responsibly just by performing their own work. but some some objects take on further responsibilities such as;
- Representing real-world entities
- Coordinating work
- Modeling the state of a system
When they have that extra responsibility to carry they become responsible for self and other clients too.
How to instantiate a single instance and global access?
The mechanics of Singleton are more memorable than its intent.It is easier to explain how to ensure that a class has only one instance than it is to say why you might want this restriction.You might categorize Singleton as a “creational” pattern.
One way create this instance as a static field in the class.
- example: The Runtime class in java.lang includes the line:
–private static Runtime currentRuntime = new Runtime();
Lazy Initialization
The system might wait until the instance is first needed.
Example : A Factory class might make its single instance available with
public static Factory getFactory() {
if (factory == null) {
factory = new Factory();
// …}
return factory;
}
Garbage Collection
Once you create a singleton instance it might get garbage-collected. If there is you might want to prevent this, specially if the objects has a significant startup cost or if it is gathering statistics.
Tip: This can be handled by having a reference to the object on the main process.
Related Posts
Recent Posts
- How to populate a dropdown menu from database in CodeIgniter [Workaround]
- How to Overclock Samsung Galaxy Mini Upto 800MHz
- Current and Future Relavance of Business Excellence / Improvement to Argos UK Ltd. Possible Benefits and Likely Inhabitors Exists
- What can Harm Your Online Reputation?
- Does Race Matter in the Choice of Popular Music among Youngsters?
The Tutebox
- Accounting
- Android Tips
- Apps
- Business
- C / C++
- Computers
- Database
- Design Patterns
- E-Commerce
- Economics
- Electronics
- Entertainment
- Finance
- Functional Programming
- Games
- Hardware
- Health
- HRM
- International Business
- Internet
- iOS Tips
- JAVA
- Life Style
- Linux
- M-Commerce
- Management
- Marketing
- Mathematics
- Mobile
- MS Office
- Network
- PC
- Personal Development
- Photography
- PHP
- Physics
- Places
- Programming
- Science
- Software
- Statistics
- Tweaks
- Visual Studio
- Web Hosting
- Windows

Article by




