首页 > 其他分享 >核心(Hutool-core)语言特性(单例工具-Singleton)

核心(Hutool-core)语言特性(单例工具-Singleton)

时间:2024-06-14 17:54:11浏览次数:9  
标签:core Singleton Animal Hutool public say 单例 class

为什么会有这个类
平常我们使用单例不外乎两种方式:

在对象里加个静态方法getInstance()来获取。此方式可以参考 【转】线程安全的单例模式 (opens new window)这篇博客,可分为饿汉和饱汉模式。
通过Spring这类容器统一管理对象,用的时候去对象池中拿。Spring也可以通过配置决定懒汉或者饿汉模式
说实话我更倾向于第二种,但是Spring更注重的是注入,而不是拿,于是我想做Singleton这个类,维护一个单例的池,用这个单例对象的时候直接来拿就可以,这里我用的懒汉模式。我只是想把单例的管理方式换一种思路,我希望管理单例的是一个容器工具,而不是一个大大的框架,这样能大大减少单例使用的复杂性。

使用

/**

  • 单例样例
  • @author loolly

*/
public class SingletonDemo {

/**
 * 动物接口
 * @author loolly
 *
 */
public static interface Animal{
    public void say();
}

/**
 * 狗实现
 * @author loolly
 *
 */
public static class Dog implements Animal{
    @Override
    public void say() {
        System.out.println("汪汪");
    }
}

/**
 * 猫实现
 * @author loolly
 *
 */
public static class Cat implements Animal{
    @Override
    public void say() {
        System.out.println("喵喵");
    }
}

public static void main(String[] args) {
    Animal dog = Singleton.get(Dog.class);
    Animal cat = Singleton.get(Cat.class);

    //单例对象每次取出为同一个对象,除非调用Singleton.destroy()或者remove方法
    System.out.println(dog == Singleton.get(Dog.class));        //True
    System.out.println(cat == Singleton.get(Cat.class));            //True

    dog.say();        //汪汪
    cat.say();        //喵喵
}

}

总结

大家如果有兴趣可以看下这个类,实现非常简单,用一个安全的ConcurrentHashMap作为单例对象池,通过newInstance()实例化对象(支持带参数的构造方法),无论取还是创建对象都是线程安全的。

标签:core,Singleton,Animal,Hutool,public,say,单例,class
From: https://www.cnblogs.com/velloLei/p/18248390

相关文章

  • 核心(Hutool-core)日期时间(计时器工具-TimeInterval)
    Hutool通过封装TimeInterval实现计时器功能,即可以计算方法或过程执行的时间。TimeInterval支持分组计时,方便对比时间。使用TimeIntervaltimer=DateUtil.timer();//---------------------------------//-------这是执行过程//---------------------------------timer.int......
  • 核心(Hutool-core)IO流相关(IO工具类-IoUtil)
    方法拷贝流的读写可以总结为从输入流读取,从输出流写出,这个过程我们定义为拷贝。这是一个基本过程,也是文件、流操作的基础。以文件流拷贝为例:BufferedInputStreamin=FileUtil.getInputStream("d:/test.txt");BufferedOutputStreamout=FileUtil.getOutputStream("d:/test......
  • 核心(Hutool-core)IO流相关
    由来IO的操作包括读和写,应用场景包括网络操作和文件操作。IO操作在Java中是一个较为复杂的过程,我们在面对不同的场景时,要选择不同的InputStream和OutputStream实现来完成这些操作。而如果想读写字符流,还需要Reader和Writer的各种实现类。这些繁杂的实现类,一方面给我们提供了更多......
  • 核心(Hutool-core)日期时间
    日期时间包是Hutool的核心包之一,提供针对JDK中Date和Calendar对象的封装,封装对象如下:日期时间工具DateUtil针对日期时间操作提供一系列静态方法DateTime提供类似于Joda-Time中日期时间对象的封装,继承自Date类,并提供更加丰富的对象方法。FastDateFormat提供线程安全的针对Da......
  • 核心(Hutool-core)类型转换
    在Java开发中我们要面对各种各样的类型转换问题,尤其是从命令行获取的用户参数、从HttpRequest获取的Parameter等等,这些参数类型多种多样,我们怎么去转换他们呢?常用的办法是先整成String,然后调用XXX.parseXXX方法,还要承受转换失败的风险,不得不加一层trycatch,这个小小的过程混迹在业......
  • ASP.NET Core应用程序10:使用表单标签助手
      本章描述用于创建HTML表单的内置标签助手。这些标签助手确保表单提交到正确的操作或页面处理程序方法,并确保元素准确地表示特定的模型属性。  本章解释ASP.NETCore提供的创建HTML表单的功能。展示如何使用标签助手来选择表单目标和关联的imput、textarea和select......
  • 跟着杨中科学习(六)EFCore(四)
    自引用的组织结构树classOrgUnit{publiclongId{get;set;}publiclong?ParentId{get;set;}publicstringName{get;set;}publicOrgUnit?Parent{get;set;}publicList<OrgUnit>Children{get;set;}=newList<OrgUnit&g......
  • netcore HTTP Error 500.30 - ASP.NET Core app failed to start
    netcoreHTTPError500.30-ASP.NETCoreappfailedtostart 错误解释:HTTPError500.30表示在尝试启动ASP.NETCore应用程序时发生了错误。这通常是因为应用程序无法找到或无法正确加载.NETCore运行时或应用程序的相关依赖项。解决方法:确认.NETCore运行时已安装:检查......
  • 【ARM Coresight Debug 系列 -- ARMv8/v9 Watchpoint 软件实现地址监控详细介绍】
    请阅读【嵌入式开发学习必备专栏】文章目录ARMv8/v9WatchpointexceptionsWatchpoint配置信息读取ExecutionconditionsWatchpointdataaddresscomparisonsSizeofthedataaccessWatchpoint软件配置流程WatchpointType使用介绍WT,Bit[20]:WatchpointType......
  • pythonocc基础:OCC.Core.TopAbs 类简介
    在PythonOCC库中,OCC.Core.TopAbs模块定义了一系列枚举类型,这些枚举类型代表了拓扑形状的不同类别(Topology)。这些类别是构建和操作三维几何模型的基础,特别是在处理布尔运算、几何约束、参数化设计等复杂任务时。TopAbs类提供了统一的接口来识别和区分不同的拓扑元素,是OpenCASCAD......