java: Singleton Pattern
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | /** * 版权所有 2022 涂聚文有限公司 * 许可信息查看: * 描述: * 单例模式 (Singleton Patterns) * 历史版本: JDK 14.02 * 2022-09-12 创建者 geovindu * 2022-09-12 添加 Lambda * 2022-09-12 修改:date * 接口类 * 2022-09-12 修改者:Geovin Du * 生成API帮助文档的指令: *javadoc - -encoding Utf-8 -d apidoc RegSingleton.java * * */ package com.javapatterns.singleton; import java.util.HashMap; public class RegSingleton { static private HashMap m_registry = new HashMap(); /** *保护默认构造子 * */ protected RegSingleton() {} /** * 静态工厂方法 * */ static public RegSingleton getInstance(String name) { if (name == null ) { name = "com.javapatterns.singleton.RegSingleton" ; } System.out.println( "From RegSingleton: requesting for " + name ); if (m_registry.get(name) == null ) { try { m_registry.put( name, Class.forName(name).newInstance() ) ; } catch (ClassNotFoundException e) { System.out.println( "Class " + name + " is not found." ); } catch (InstantiationException e) { System.out.println( "Class " + name + " can not be instantiated." ); } catch (IllegalAccessException e) { System.out.println( "Class " + name + " can not be accessed." ); } } return (RegSingleton) (m_registry.get(name) ); } static { RegSingleton x = new RegSingleton(); m_registry.put( x.getClass().getName() , x); } /** * 一个示意性商业方法 * **/ public String about() { return "Hello, I am RegSingleton." ; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | /** * 版权所有 2022 涂聚文有限公司 * 许可信息查看: * 描述: * 单例模式 (Singleton Patterns) * 历史版本: JDK 14.02 * 2022-09-12 创建者 geovindu * 2022-09-12 添加 Lambda * 2022-09-12 修改:date * 接口类 * 2022-09-12 修改者:Geovin Du * 生成API帮助文档的指令: *javadoc - -encoding Utf-8 -d apidoc RegSingletonChild.java * * */ package com.javapatterns.singleton; import java.util.HashMap; public class RegSingletonChild extends RegSingleton{ public RegSingletonChild() {} /** * 静态工厂方法 * */ static public RegSingletonChild getInstance() { return (RegSingletonChild) RegSingleton.getInstance( "com.javapatterns.singleton.RegSingletonChild" ); } /** * 一个示意性商业方法 * **/ public String about() { return "Hello, I am RegSingletonChild." ; } } |
调用测试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | //登记单例模式 RegSingleton s = RegSingleton.getInstance( "RegSingleton" ); if (s== null ) { System.out.println( "未找到类" ); } else { String ss=s.about(); System.out.println(ss); } RegSingletonChild sc=RegSingletonChild.getInstance(); if (sc== null ) { System.out.println( "未找到类" ); } else { String ssc=sc.about(); System.out.println(ssc); } |
输出:
1 2 3 4 5 | From RegSingleton: requesting for RegSingleton Class RegSingleton is not found. 未找到类 From RegSingleton: requesting for com.javapatterns.singleton.RegSingletonChild Hello, I am RegSingletonChild. |
哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2020-09-13 css: Bootstrap 4 or 3 Multilevel Dropdown Menu
2010-09-13 Repeater和CheckBox控件(客户端和服务器端)实行全选或多条选择
2010-09-13 C# 用jquery多个文件上传