Singleton Sum
Upcoming SlideShare
Loading in...5
×
 

Singleton Sum

on

  • 3,175 views

Summarise singleton pattern : lazy and eager design

Summarise singleton pattern : lazy and eager design

Statistics

Views

Total Views
3,175
Views on SlideShare
2,756
Embed Views
419

Actions

Likes
3
Downloads
26
Comments
0

11 Embeds 419

http://ouertani.com 237
http://www.jroller.com 135
http://www.mybestcv2.co.il 19
http://www.linkedin.com 15
https://www.linkedin.com 6
http://www.slideshare.net 2
http://www.hanrss.com 1
http://jroller.com 1
http://xss.yandex.net 1
http://translate.googleusercontent.com 1
http://static.slidesharecdn.com 1
More...

Accessibility

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Singleton Sum Singleton Sum Presentation Transcript

  • Singleton    Singleton pattern in java enterprise world Slim Ouertani    
  • Intent Ensure a class only has one instance, and  provide a global point of access to it. [GoF p  119]    
  • Motivation  It's important for some classes to have exactly one  instance. 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?  A global variable makes an object accessible, but it  doesn't keep you from instantiating multiple objects.    
  • Motivation A better solution is to make the class itself responsible  for keeping track of its sole instance.  The  class  can  ensure  that  no  other  instance  can  be  created  (by  intercepting  requests  to  create  new  objects),  and  it  can  provide  a  way  to  access  the  instance.  This is the Singleton pattern.    
  • HOW ? Before release 1.5, there were two ways to  implement singletons.  Both are based on keeping the constructor  private and exporting a public static member to  provide access to the sole instance.  In one approach, the member is a final field    
  • Singleton with public final field public class Elvis {     public static final Elvis INSTANCE = new Elvis();     private Elvis() { ... }     public void leaveTheBuilding() { ... } } Reflexion!!!    
  • Singleton with static factory public class Elvis implements Serializable{     private static final Elvis INSTANCE = new Elvis();     private Elvis() {}     public static Elvis getInstance() {                return INSTANCE;      } } Serialisation!!!    
  • single­element enum type public enum Elvis {     INSTANCE;     public void leaveTheBuilding() { ... } } JAVA 5    
  • Lazy initialization Lazy initialization is the act of delaying the initialization  of a field until its value is needed. If the value is never needed, the field is never  initialized. Lazy initialization is a double­edged sword. It  decreases the cost of initializing a class or creating an  instance, at the expense of increasing the cost of  accessing the lazily initialized field. In the presence of multiple threads, lazy initialization is  tricky.    
  • Lazy initialization of instance field synchronized accessor private static Elvis elvis; synchronized static  Elvis getElvis() {     if (elvis == null)         elvis = new Elvis();     return elvis; } Slow!!!    
  • Double­Checked Locking idiom DCL static volatile Singleton instance; public static Singleton getInstance() {   if (instance == null) {     synchronized (Singleton.class) {       if (instance == null)         instance == new Singleton();     }   }   return instance; } No java 1.4!!!    
  • Lazy initialization holder class idiom private static class ElvisHolder {     static final Elvis INSTANCE = new Elvis(); } static Elvis getInstance() {  return ElvisHolder.INSTANCE;  } JAVA 5 & 1.4    
  • References GoF Effective Java 1 & 2 http://fr.wikipedia.org/wiki/Double­checked_locking