单例设计模式

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

思路:如果要让类只产生一个对象,我们首先必须将其构造器访问权限设置为private,这样就不可以使用new操作符在类的外部产生对象的实例,但是在类的内部仍然可以产生类的对象。在外部无法取得类的对象,只能调用该类的某个静态方法来返回类内部创建的对象,静态方法只能访问类中的静态成员变量,所以,指向类内部产生该类对象的变量也必须定义为静态的。

单例设计模式之一:饿汉式

public class SingletonTest1 {

    public static void main(String[] args) {
        Bank bank1 = Bank.getInstance();
        Bank bank2 = Bank.getInstance();
        System.out.println(bank1 == bank2);
    }

}


class Bank{
    //1.私有化构造器
    private Bank(){
    }

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

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

单例设计模式之二:懒汉式

public class SingletonTest2 {
    public static void main(String[] args) {
        House house1 = House.getInstance();
        House house2 = House.getInstance();
        System.out.println(house1 == house2);
    }
}


class House {

    //1.私有化构造器
    private House() {
    }

    //2.将对象初始化为null(要求此对象也声明为静态的)
    private static House instance = null;

    //3.提供公共的静态的方法返回类的对象
    //4.使用synchronized关键字线程同步,使之线程俺安全
    public static House getInstance() {

        //方式一:效率稍低
//        synchronized (House.class) {
//            if (instance == null) {
//                instance = new House();
//            }
//        }
//        return instance;

        //方式二:如果对象已经创建,则不用进入同步代码块进行判断,提高效率
        if(instance == null){
            synchronized (House.class) {
                if (instance == null) {
                    instance = new House();
                }
            }
        }

        return instance;
    }

}

懒汉式与饿汉式对比

饿汉式:

  • 好处:饿汉式为线程安全的。
  • 坏处:对象加载时间过长,即使不需要对象,也需要加载。

懒汉式:

  • 好处:延迟对象的创建,用时才创建,不用不创建。
  • 坏处:在多线程运行时可能创建多个对象(线程不安全),可以线程同步解决线程不安全问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值