【设计模式】单例设计模式

1.作用: 在应用程序有保证最多只能有一个实例.
2.好处:
2.1 提升运行效率.
2.2 实现数据共享.
案例:application 对象

3. 懒汉式

3.1 对象只有被调用时才去创建,由于添加了锁 所以效率低
3.2 示例代码

package 单例设计;

public class SingleTon {
    /**
     * 无返回值 方法名和类名相同
     *其他类不能实例化这个接口
     *
     * 对外提供访问入口
     */

/**
 *
 * 由于对象需要被静态方法调用 把方法设置为static
 * 由于对象是static 必须设置访问权限修饰符 为private
 * 如果是public 可以直接调用对象了 不执行访问入口;1
 */
private  static SingleTon singleTon;
private SingleTon(){
}
/**
 * 实例方法是通过对象调用
 * 设置方法为静态方法
 *
 * 多线程访问下,可能出现if同时出现的情况 要添加锁
 * @return
 */

public static SingleTon getInstance(){
    if (singleTon==null)
        synchronized (SingleTon.class) {
            if (singleTon==null)
                //双重验证 防止前面的线程new了,后面那段new
                 singleTon = new SingleTon();
        }
    return singleTon;
   }

}

Test

package 单例设计;

public class Test {
    public static void main(String[] args) {
        SingleTon singleTon = SingleTon.getInstance();
        SingleTon singleTon1 = SingleTon.getInstance();
        System.out.println(singleTon);
        System.out.println(singleTon1);
    }
}

在这里插入图片描述

4. 饿汉式

4.1 解决了懒汉式中多线程访问可能出现同一个对象和效率低问

4.2在类加载时候就去创建了一个对象
4.3代码

package 单例设计;

public class HungryMan {
    //在类加载时就实例化
    private static HungryMan hungryMan=new HungryMan();
    private HungryMan(){}

    public static HungryMan getInstance(){
        return hungryMan;
    }
}

Test

  @org.junit.Test
    public  void demoHungry(){
        HungryMan hungryMan =HungryMan.getInstance();
        HungryMan hungryMan1=HungryMan.getInstance();
        System.out.println(hungryMan);
        System.out.println(hungryMan1);
    }

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值