设计模式之—单例模式(Singleton)-Java实现

来源:互联网 发布:mac解压缩软件破解版 编辑:程序博客网 时间:2024/05/21 15:42
     单例模式限制了使用这个模式的类只能生成一个对象。有一些对象其实我们完全只需要一个即可,如:线程池(threadpool)、缓存(cache)、注册表(registry)的对象、设备的驱动程序的对象等等。事实上,这些类的对象只能有一个实例,如果制造出多个实例,就会导致许多问题的产生,例如:程序的行为异常、资源的过量使用、产生不一致的结果等等。Java Singleton模式就为我们提供了这样实现的可能。是用Singleton的好处还在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收(garbage collection)。

 

     下面我就用代码来实现一个Singleton模式:

public class Singleton {private static Singleton instance = new Singleton();private Singleton(){}public static Singleton getInstance(){return instance;}}
注解:

    static这个关键字,它是Singleton模式的核心。

    1.Singleton类的成员变量instance被声明为staitc就意味着这个成员变量只有一份(而不是每个对象一份)。

    2.getInstance()这个方法是static的就是说,这个方法在Singleton这个类没有被实例化的时候就能使用。

    3.当Singleton这个类被加载的时候(即:执行Singleton singleton1 = Singleton.getInstance();这句话的时候,注意不是这句话Singleton singleton1; ),这个类的静态成员变量instance被初始化(private static Singleton instance = new Singleton(); 这句话被执行),然后(注意是先初始化,再调用)调用getInstance()方法返回这个成员变量instance,当执行Singleton singleton2 = Singleton.getInstance();这句话的时候,因为instance被声明成static,因此,private static Singleton instance = new Singleton(); 不会被(注意是不会被)再次调用,而是直接调用getInstance()方法,返回同一个instance。这样就实现了Singleton这个模式。

下面是一些扩展,既然我们能够限制类只能生成一个对象,那么就能限制它最多生成指定数量个对象,代码如下:

public class Singleton {    private Singleton(){}       private static int count = 0;       public synchronized static Singleton getInstance() {           if(count < 10){              count++;              return new Singleton();           }else{              return null;          }             }   }



原创粉丝点击