设计模式之单例模式

设计模式分为三种类型,共23种  

  1. 创建型模式(5种):单例模式、抽象工厂模式、原型模式、建造者模式、工厂模式。
  2. 结构型模式(7种):适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。
  3. 行为型模式(11种):模板方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter模式)、状态模式、策略模式、职责链模式(责任链模式)。

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

单例模式8种方式:  

  1. 饿汉式(静态常量)(推荐使用)
  2. 饿汉式(静态代码块)
  3. 懒汉式(线程不安全)
  4. 懒汉式(线程安全,同步方法)
  5. 懒汉式(线程安全,同步代码块)
  6. 双重检查(推荐使用)
  7. 静态内部类(推荐使用)
  8. 枚举(推荐使用)

这里只展示推荐使用的实现方式,其他不推荐方式就不展示了,下面就直接上代码:

实现方式1:饿汉式(静态常量)

public class SingleCase1 {
    public static void main(String[] args) {
        Single instance = Single.getInstance();
        Single instance2 = Single.getInstance();
        System.out.println(instance == instance2);
   }
}

class Single{
      private Single(){}
      private static final Single instance = new Single();
      public static Single getInstance(){
         return instance;
     }
}

实现方式2:双重检查(推荐使用)

注意:推荐使用这种方式,既能解决线程问题,也能提高效率。

实现方式3:静态内部类(推荐使用)

特点:1、类在加载的时候静态内部类是不进行装载的

2、在调用实例方法时,才会进行装载,内部类在装载的时候线程是安全的

优缺点:  

  1. 这种方式采用了类装载的机制来保证初始化实例时只有一个线程。
  2. 静态内部类方式在Singelton类被装载时并不会立即实例化,而是在需要实例化时,调用getInstance方法,才会装载SingeltonInstance类,从而完成Singelton的实例化。
  3. 类的静态属性只会在第一次加载类的时候初始化,所以在这里,JVM帮我们保证了线程的安全性,在类进行初始化时,别的线程是无法进入的。
  4. 优点:避免了线程不安全,利用静态内部类特点实现延迟加载,效率高
  5. 结论:推荐使用这种方式。

实现方式4:枚举(推荐使用)

优缺点:  

  1. 枚举借助JDK1.5中添加的枚举来实现单例模式。
  2. 不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象。
  3. 这种方式是Effective Java 作者Josh Bloch提倡的方式。
  4. 结论:推荐使用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值