设计模式-单例模式

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

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加载,就会产生该类的实例(不管有用没用,先生成实例,所以是恶汉式),以后获取的都是统一对象,不会产生多线程下产生多个实例。而懒汉式由于只有该类被引用式,才会创建实例,所以需要解决多线程情况下的资源同步问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值