首页 > 代码库 > 单例设计模式

单例设计模式

单例设计模式:一个类有且仅有一个实例,并且自行实例化向整个系统提供

要点
    一是某个类只能有一个实例——私有的构造方法;
    二是它必须自行创建这个实例——指向自己实例的私有静态引用;
    三是它必须自行向整个系统提供这个实例。——以自己实例为返回值的静态的公有的方法
单例模式根据实例化对象时机的不同分为两种:一种是饿汉式单例,一种是懒汉式单例。饿汉式单例在单例类被加载时,就实例化一个对象交给自己的引用;而懒汉式在调用取得实例方法的时候才去实例化对象。代码如下:

饿汉式

1 public class Singleton {2     private static Singleton singleton = new Singleton();3     private Singleton(){}4     public static Singleton getInstance() {5         return singleton;6 }


懒汉式

 1 public class Singleton { 2     private static Singleton singleton; 3     private Singleton() {} 4      5     public static synchronized Singleton getInstance() { 6         if (singleton == null) { 7             singleton = new Singleton; 8         } 9         return singleton;10     }11 }


第三种格式

1 class Singleton {2     private Singleton() {}3     public static final Singleton singleton = new Singleton();4 }

 

优点
    在内存中只有一个对象,节省内存空间;
    避免频繁的创建和销毁对象
    可以在系统设置全局的访问点,优化和共享资源的访问,确保所有对象都访问唯一实例。
    
应用实例

 1 class Singleton { 2     private int num = 10; 3     private static Singleton singleton = new Singleton(); 4     private Singleton() {} 5      6     public static Singleton getInstance() { 7         return singleton; 8     } 9     public void setNum(int num) {10         this.num = num;11     }12     public int getNum() {13         return this.num;14     }15 }16 17 class SingletonDemo {18     public static void main(String[] args) {19         Singleton s = Singleton.getInstance();20         Singleton s1 = Singleton.getInstance();21         s.setNum(10);22         System.out.println(s.getNum());23         System.out.println(s1.getNum());24     }25 }

 

单例设计模式