第十一天 23种设计模式之单例模式

单例模式:一个类有且仅有一个实例,并且自行实例化向整个系统提供。

单例模式的两种形式:
  1. 饿汉模式:开始就创建该类的实例对象赋值给一个该类型的私有静态变量。(开始就进行类的实例化)

  1. 懒汉模式:先创建一个该类型的私有静态变量赋值为null,需要用到实例对象的时候再去创建,

然后将该对象实例赋值给该类型的变量。(什么时候用什么时候进行类的实例化)。

两种模式的优缺点:

饿汉式:

优点:天生是线程安全的。

缺点:在类加载的时候就进行了类的实例化,在内存中的存储时间过长。

懒汉式:

优点:对象在内存中的存储时间较短,需要用到对象时才进行实例化。

缺点:本身是线程不安全的,因此在多线程情况下还要将代码进行修改,使得变成线程安全的。

单例模式的要点有三个:

①是某个类只能有一个实例。

②是它必须自行创建这个实例。

③是它必须自行向整个系统提供这个实例。

从具体实现角度来说,就是以下三点:

①单例模式的类只提供私有的构造函数。

②类定义中含有一个该类的静态私有对象作为属性。

③该类提供了一个公有的静态的函数用于创建或获取它本身的静态私有对象。

TODO--->如下的懒汉模式写法是线程不安全的,后面再来补全。

public class SingletonTest {
    public static void main(String[] args) {
        Bank bank = Bank.getInstance();
        Bank instance = Bank.getInstance();
        System.out.println(bank == instance);//true

        Pig instance1 = Pig.getInstance();
        Pig instance2 = Pig.getInstance();
        System.out.println(instance1 == instance2);//true
    }
}

//饿汉模式
class Bank {

    //2.类定义中含有一个该类的静态私有对象作为属性。
    private static Bank instance = new Bank();

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

    }

    //3.该类提供了一个公有的静态的函数用于创建或获取它本身的静态私有对象。
    public static Bank getInstance() {
        return instance;
    }

}

//懒汉式
class Pig {
    //2.创建一个该类型的私有静态变量并赋值为null。
    private static Pig instance = null;

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

    }

    //3.该类提供了一个公有的静态的函数用于创建或获取它本身的静态私有对象。但是该类的实例化只能进行一次。
    public static Pig getInstance() {
        //4.进行类的实例化
        if (instance == null) {
            instance = new Pig();
        }

        return instance;
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值