设计模式-单例模式

来源:互联网 发布:300036超图软件 股吧 编辑:程序博客网 时间:2024/06/05 14:12

单例模式又可分为恶汉式和懒汉式:
恶汉式实现方法:

package com.dx.demo;/** * 单例模式-恶汉模式 * @author xiangzi *  */public class SingleDemo1 {    private static SingleDemo1 single = new SingleDemo1();    //构造方法私有化    private SingleDemo1(){}    //获取单例对象    public static SingleDemo1 getInstance(){        return single;    }    //其他方法    public void otherMetod(){        System.out.println("other methods ........");    }}package com.dx.demo;/** * 测试 * @author xiangzi * */public class MainTest {    public static void main(String[] args) {        SingleDemo1 single1 = SingleDemo1.getInstance();        SingleDemo1 single2 = SingleDemo1.getInstance();        System.out.println(single1 == single2);        System.out.println("==============================");        single1.otherMetod();    }}

测试结果:

true==============================other methods ........

懒汉式实现:

package com.dx.demo;/** * 单例模式-懒汉模式 *  * @author xiangzi *  */public class SingleDemo2 {    private static SingleDemo2 single = null;    //构造方法私有化    private SingleDemo2(){}    //获取单例对象    public static SingleDemo2 getInstance(){        //多线程下,利用synchronized解决同步问题        synchronized (SingleDemo2.class) {            if(single == null){                single = new SingleDemo2();            }        }        return single;    }    //其他方法    public void otherMetod(){        System.out.println("other methods ........");    }}package com.dx.demo;/** * 测试 * @author xiangzi * */public class MainTest {    public static void main(String[] args) {        SingleDemo2 single1 = SingleDemo2.getInstance();        SingleDemo2 single2 = SingleDemo2.getInstance();        System.out.println(single1 == single2);        System.out.println("==============================");        single1.otherMetod();    }}

测试结果:

true==============================other methods ........

总结:恶汉模式下,由于当前对象一旦被jvm加载,就会产生该类的实例(不管有用没用,先生成实例,所以是恶汉式),以后获取的都是统一对象,不会产生多线程下产生多个实例。而懒汉式由于只有该类被引用式,才会创建实例,所以需要解决多线程情况下的资源同步问题。

原创粉丝点击