Java模式理解阶段一:单例模式

Java的设计模式总体分为三大类

创建型模式
工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

结构型模式
适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

行为型模式
策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

一、单例模式

单例模式分为懒汉式和饿汉式

饿汉式:
在声明对象时就初始化,饿汉式天生线程安全,类加载的时候初始化一次对象,效率比懒汉式要高。

public class SingleTon {
    //定义私有构造方法
    private SingleTon(){
    }

    //饿汉式  类加载的时候就进行初始化
    private static final  SingleTon single = new SingleTon();

    public static SingleTon getInstance(){
        return single;
    }
}

懒汉式:
在静态方法中进行初始化,懒汉式线程不安全,需要加同步锁,同步锁影响执行效率

public class SingleTon {
	//定义私有构造方法
    private SingleTon2(){


    }
    //懒汉式  双重校验保证线程安全  使用volatile可以保证指令重排序
    private volatile static SingleTon singleTon = null;


    public static SingleTon getInstance(){
        if (singleTon==null){
            synchronized (SingleTon.class){
                if (singleTon==null){
                    singleTon = new SingleTon();
                }
            }
        }
        return singleTon;
    }
}

对于单例模式的理解

  • 在单例模式中单例类只能有一个实例,其中单例模式中的构造方法必须为私有,目的是防止外部去创建。
  • 既然不是通过外部去实例化,那么只能在本类中创建对象,并且必须设计为私有的。
  • 但是如果外部类要去访问这个实例对象,在本类中必须有一个方法可以供外部访问。
  • 单例类可以设计为final,目的在于不能被子类继承。

单例模式的饿汉式:

  • 对于饿汉式式来说是不存在多线程的问题,这也是单例模式的优点。
  • 但是对于饿汉式式来说,在类加载的时候静态代码就会被初始化,因此在类加载时就会创建实例对象,并且分配内存空间,不管这个对象要不要使用都会占据内存空间。

单例模式的懒汉式:

  • 对于懒汉式,在类加载的时候虽然也会创建对象,但是将对象设为null,因此并不会占用内存,当调用getInstance方法时才会被初始化实例对象。
  • 但是这样的方式也会存在多线程问题,因此通过使用volatile以及synchronized关键加锁来解决懒汉式多线程问题。

以上就是对单例模式的总结以及理解,欢迎指正交流。 刚入行的小白希望多指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值