设计模式——单例模式

在单例模式中,又有两种形态的
一、饿汉模式
二、懒汉模式
 
1、饿汉模式
/*
 * 饿汗模式,在类加载的过程中该类就已经被实例化
 */
public class Singleton {

    //创建一个类属性,这个类属性 指向一个该类的实例化对象。
    //private关键字可以防止其他类直接操作该属性   
    private static Singleton singleton = new Singleton();
     
    //使用私有构造方法,无法使其他类通过 构造方法 实例化 该类
    private Singleton(){
         
    }
 
    //通过一个public的get方法能够使外部类获取到该类属性singleton     
    public static Singleton getSingleton(){
        return singleton;
    }
}
2、懒汉模式
/*
 * 懒汉模式,只有在外部类调用get方法是,Singleton2才被实例化
 */
public class Singleton2 {
 
        //创建一个类属性,这个类属性为空,不指向任何实例对象
        //private关键字可以防止其他类直接操作该属性   
        private static Singleton2 singleton2;
         
        //使用私有构造方法,无法使其他类通过 构造方法 实例化 该类
        private Singleton2(){
             
        }
 
        //通过一个public的get方法能够使外部类获取到该类属性singleton     
        public static Singleton2 getSingleton2(){
            if(singleton2== null){             
                singleton2=new Singleton2();
                System.out.println("single2被实例化了");
            }
            return singleton2;
        }
 
}
 
为了验证懒汉模式下只有调用才会实例化Singleton2,测试如下
2.1、测试一
class test{
    public static void main(String[] args) {
        //Singleton2 singleton2 = Singleton2.getSingleton2();
        System.out.println("结束");
         
}
测试一结果如下
2.2、测试二
class test{
    public static void main(String[] args) {
        Singleton2 singleton2 = Singleton2.getSingleton2();
        System.out.println("结束");
         
    }
}
结果如下
 
3、总结
单例模式的意义可以是一个类只有一个实例,并且要为全部的类提供这个单例类的唯一实例,具体实现可以参考代码
 
懒汉模式和饿汉模式的区别:
 
懒汉模式:在编译的时候就创建了单例实例对象,因此不存在单例类被多次实例化的情况
但是会造成编译时间变长。
 
饿汉模式:在外部类判断单例对象引用为空时才会被创建,是运行时创建单例对象,但是 存在多个线程同时判断是否单例对象创建,那就会同时创建多个单例对象。解决方法引入同步机制。
posted @ 2016-11-07 13:41  向向向阳  阅读(132)  评论(0)    收藏  举报