This blog is about Java development and describes in detail the most interesting topics.
Posts with tag «dependency injection»
The singleton design pattern is one of the most inappropriately used patterns. In this article we review several implementations of a singleton that work correctly in multithreaded environment, with serialization and cloning tasks and even with reflection attacks.
Contents What for you can use singleton Distinction from static class Lazy or eager loading singleton? Eager loading singleton Rough synchronization Double-checked locking singleton Initialization-on-demand holder idiom The enum based singleton Problems with serialization and deserialization Problems with clone Problems with reflection So, why you can think about singleton as anti-pattern? Conclusion What for you can use singleton The singleton pattern is used when there must be exactly one instance of a class, and it must be accessible to clients from a well-known access point or when the single instance should be extensible by sub-classes, and clients should be able to use an extended instance without modifying their code. Distinction from static class JDK has examples of both singleton and static, on the one hand java.lang.Math is a final class with static methods, on the other hand java.lang.Runtime is a singleton class. Advantages of singleton If your need to maintain state than singleton pattern is better choice than static class, because maintaining state in static class leads to bugs, especially in concurrent environment, that could lead to race conditions without adequate synchronization parallel modification by multiple threads. Singleton class can be lazy loaded i... Read more