java 设计模式 单例模式

34 篇文章 0 订阅
30 篇文章 0 订阅

  

       所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对 某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。

       如果我们要让类在一个虚拟机中只能产生一个对象,我们首先必须将类的构 造器的访问权限设置为private,这样,就不能用new操作符在类的外部产生 类的对象了,但在类内部仍可以产生该类的对象。

        因为在类的外部开始还无 法得到类的对象,只能调用该类的某个静态方法以返回类内部创建的对象, 静态方法只能访问类中的静态成员变量,所以,指向类内部产生的该类对象 的变量也必须定义成静态的

 

单例模式的优点:

       由于单例模式只生成一个实例,减少了系统性能开销,当一个对象的 产生需要比较多的资源时,如读取配置、产生其他依赖对象时,则可 以通过在应用启动时直接产生一个单例对象,然后永久驻留内存的方 式来解决。

 

单例模式的饿汉式实现:

package com.hao.zhi.lv.SingletonTest1;

/**
 *单例模式的饿汉式实现
 *
 */

public class Bank1 {
    //1.定义私有化的构造器
    private Bank1(){

    };

    //2.内部创建类的的对象 ,要求此对象也必须声明为静态的
    private static Bank1 instance=new Bank1();


    //3.提供公共的静态的方法,返回类的对象
    public static Bank1 getInstance() {
        return instance;
    }




}

单例模式的懒汉式实现:

package com.hao.zhi.lv.SingletonTest2;

/**
 *
 * 单例模式的懒汉式实现
 */
public class Bank2 {
    //1、定义一个私有化实例
    private Bank2(){

    }

    //2、声明一个对象,要求此对象也必须声明为静态的
    private static Bank2 instance=null;

    //3.声明public、static的返回当前类对象的方法
    public static Bank2 getInstance(){
        if (instance==null){
            instance=new  Bank2();
        }
            return instance;

    }

}

 

单例模式的懒汉式实现存在线程安全问题。

解决线程安全方式1:

package com.hao.zhi.lv.SingletonTest2;

/**
 *
 * 单例模式的懒汉式实现
 */
public class Bank2 {
    //1、定义一个私有化实例
    private Bank2(){

    }

    //2、声明一个对象,要求此对象也必须声明为静态的
    private static Bank2 instance=null;

    //3.声明public、static的返回当前类对象的方法
    public synchronized static Bank2 getInstance(){
        if (instance==null){
            instance=new  Bank2();
        }
            return instance;

    }

}

解决线程安全方式1:

package com.hao.zhi.lv.SingletonTest2;

/**
 *
 * 单例模式的懒汉式实现
 */
public class Bank2 {
    //1、定义一个私有化实例
    private Bank2(){

    }

    //2、声明一个对象,要求此对象也必须声明为静态的
    private static Bank2 instance=null;

    //3.声明public、static的返回当前类对象的方法
   public static Bank2 getInstance() {

        if (instance==null){

            synchronized(Bank2 .class){
                if (instance==null){
                    instance=new Bank2 ();
                }
            }
        }


        return instance;
    }

}

 

 

 

 

参考来自尚硅谷

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随风而行无疾而歌

看官,觉得不错,奖励一下呗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值