120 likes | 221 Views
Computer Science 313 – Advanced Programming Topics. Lecture 17: Singleton Pattern. How Can We Code…. Why One Is Better. Can create improvement from uniqueness Easy universal access to important resources Error checks and complex locks eliminated
E N D
Computer Science 313 – Advanced Programming Topics Lecture 17:Singleton Pattern
Why One Is Better • Can create improvement from uniqueness • Easy universal access to important resources • Error checks and complex locks eliminated • Avoid allocating large number of small objects • Simplifies calculating space-time tradeoffs
One Is The Loneliest Number • Correctness easy with only one object • Trigger for an error is pretty easy to find • Enforcing order of actions much quicker • Problem over which instance dominates is solved
Where To Find Singletons? • Graphic & game engines • System.out • Bars • System.err • Grocery stores • Device drivers • Laundromats • Design patterns
Where To Find Singletons? • Graphic & game engines • System.out • Bars • System.err • Grocery stores • Device drivers • Laundromats • Design patterns
Where To Find Singletons? • Graphic & game engines • System.out • Bars • System.err • Grocery stores • Device drivers • Laundromats • Design patterns
Singleton Pattern • Ensures class has exactly 1 instance • Cannot create second instance of this class • Instance constant, but fields can change • Provides single access point to instance • To ease debugging, do not let reference leak • All uses of class must go through that instance
Singleton Usage • Singleton is harmful when a global variable • publicstatic field used for instance • Eliminates ability to track updates & changes • Common anti-pattern is using global variable • Anti-patterns are habits that harm development Big Ball Of Mud Throwaway Code Kill Two Birds With One Stone Design By Committee
Singleton Pattern • System uses exactly 1 instance of the class • Instantiates only 1 instance during entire program • Guarantees that program uses only single instance • Does not restrict methods in any way • Can define and use fields like normal • Creational pattern like the factory patterns • How we (do not) create instances is focus • Usage unimportant and should not be considered
Singleton Pattern Guides Do not use for • 1 instance wanted • Global value • Instead use static field • Poor design suggested • Instantiation check • Use factory method Do use for • 1 instance possible • Global access point • For a global resource • Gatekeeper for actions • Optimize performance • Can be easily removed
For Next Class • Lab #4 on Angel • Implement Singleton pattern & a factory • You can choose the factory to implement • Read pages 179 – 186 in the book • How do we implement these Singletons? • What are the myriad ways to screw them up? • Which system bugs are exposed by this pattern?