单例

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

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

注意:

1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。

package com;

public class SingleDemo {
//1、.线程安全的饿汉模式
/* 饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变无需关注多线程问题、写法简单明了、能用则用。
但是它是加载类时创建实例、所以如果是一个工厂模式、缓存了很多实例、那么就得考虑效率问题,因为这个类一加载则把所有实例不管用不用一块创建。*/
// private final static SingleDemo singleDemo =new SingleDemo();
// private SingleDemo(){
// }
// public static SingleDemo getSingleDemo(){
// return singleDemo;
// }

//2、线程安全的懒汉式单例
/* 之所以叫做懒汉模式,主要是因为此种方法可以非常明显的lazy loading,简单说就是什么时候用,什么时候建。
然而并发其实是一种特殊情况,大多时候这个锁占用的额外资源都浪费了,这种方式写出来的结构效率很低。*/
// private static SingleDemo singleDemo;
// private SingleDemo(){
//
// }
// public static synchronized SingleDemo getSingleDemo(){
// if(singleDemo==null){
// singleDemo =new SingleDemo();
// }
// return singleDemo;
// }

//3、.双重校验锁法
// private static SingleDemo singleDemo;
// private SingleDemo(){
//
// }
// public static SingleDemo getSingleDemo(){
// if(singleDemonull){
// synchronized(SingleDemo.class){
// if(singleDemo
null){
// singleDemo = new SingleDemo();
// }
// }
// }
// return singleDemo;
// }

//4.静态类内部加载
// 使用内部类的好处是,静态内部类不会在单例加载时就加载,而是在调用getInstance()方法时才进行加载,达到了类似懒汉模式的效果,而这种方法又是线程安全的。
// private static class SingleHolder{
// private static SingleDemo singleDemo = new SingleDemo();
// }
// private SingleDemo(){
//
// }
// public static SingleDemo getSingleDemo(){
// return SingleHolder.singleDemo;
// }

//5.非常优雅的枚举实现单例模式
// enum SingleDemo{
// INSTANCE;
// public void otherMethods(){
//
// }
// }

// 推荐使用饿汉式和枚举实现单例模式,饿汉式完全不用考虑线程安全,枚举则是简单优雅;懒汉式的问题则是当没有高并发的情况下,白白浪费资源,效率低下;而且,如果创建对象时初始化的工作较多的话,可能会将这部分时间转嫁给用户,不太友好。
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值