Singleton是众多设计模式中最容易理解的一种,也是众多设计模式中较为重要的一种设计模式。接下来我们看看具体介绍。

Singleton模式实现的重点在于将构造函数私有化(private),并通过提供静态公有函数(public synchronized static xxx getInstance)来获取定义在类中的静态私有成员(private static xxx instance),通过一个简单的判断静态实例是否为空来控制这个类只能够new一次,即控制了一个类只能有单个实例,一般的实现如下代码所示:
package com.study.dp.singleton;
/**
* 传统方式实现单例模式
* @author CrazyPig
*
*/
public class TraditionalSingletion {
// 单实例
private static TraditionalSingletion instance;
// 不让new
private TraditionalSingletion() {
System.out.println("private TraditionalSingletion()");
}
public synchronized static TraditionalSingletion getInstance() {
System.out.println("TraditionalSingletion getInstance()");
if(instance == null) {
System.out.println("instance = new TraditionalSingletion()");
instance = new TraditionalSingletion();
}
return instance;
}
public static void main(String[] args) {
TraditionalSingletion instance = TraditionalSingletion.getInstance();
System.out.println("========================================");
TraditionalSingletion instance01 = TraditionalSingletion.getInstance();
System.out.println("========================================");
TraditionalSingletion instance02 = TraditionalSingletion.getInstance();
}
}
今天偶然在一篇文章中看到另外一种巧妙的做法,通过将这个单实例的引用变量定义在静态内部类中,来实现单例,这样可以做到不用if条件进行判断,并且是多线程安全的(由jvm保证)。这个特殊的做法如下所示:
package com.study.dp.singleton;
/**
* 静态内部类实现单例模式
* @author CrazyPig
*
*/
public class SpecialSingleton {
// 静态内部类
private static class NestClass {
private static SpecialSingleton instance;
static {
System.out.println("instance = new SingletonTest()");
instance = new SpecialSingleton();
}
}
// 不能直接new
private SpecialSingleton() {
System.out.println("private SingletonTest()");
}
public static SpecialSingleton getInstance() {
System.out.println("SingletonTest getInstance()");
return NestClass.instance;
}
public static void main(String[] args) {
SpecialSingleton instance = SpecialSingleton.getInstance();
System.out.println("========================================");
SpecialSingleton instance01 = SpecialSingleton.getInstance();
System.out.println("========================================");
SpecialSingleton instance02 = SpecialSingleton.getInstance();
}
}
当第一次引用getInstance()方法的时候,访问静态内部类中的静态成员变量,此时该内部类需要调用static代码块(因为首次访问该类)。而后再次访问getInstance()方法会直接返回instace引用。这种做法相对于传统做法更加巧妙。
总结
以上就是本文关于Java单例模式实现静态内部类方法示例的全部内容,希望对大家有所帮助,感兴趣的朋友可以参阅本站其他专题。
# java
# 单例
# 静态内部类
# 单例模式
# 内部类
# 静态内部类实现单例
# java算法之静态内部类实现雪花算法
# 浅谈Java内部类——静态内部类
# Java内部类应用之静态内部类应用示例
# Java中的静态内部类详解及代码示例
# java 内部类(匿名类
# 匿名对象
# 静态内部类)详解及实例
# Java编程中静态内部类与同步类的写法示例
# 浅谈Java内部类与静态内部类的区别
# 类中
# 所示
# 首次
# 感兴趣
# 能有
# 在一
# 相对于
# 来实现
# 最容易
# 多线程
# 可以做到
# 为空
# 法会
# class
# brush
# Singleton
# pre
# study
# dp
相关文章:
盘锦网站制作公司,盘锦大洼有多少5G网站?
网站设计制作企业有哪些,抖音官网主页怎么设置?
建站之星免费版是否永久可用?
如何通过云梦建站系统实现SEO快速优化?
如何制作算命网站,怎么注册算命网站?
完全自定义免费建站平台:主题模板在线生成一站式服务
如何做网站制作流程,*游戏网站怎么搭建?
如何快速辨别茅台真假?关键步骤解析
小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建
零服务器AI建站解决方案:快速部署与云端平台低成本实践
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
江苏网站制作公司有哪些,江苏书法考级官方网站?
杭州银行网站设计制作流程,杭州银行怎么开通认证方式?
建站主机默认首页配置指南:核心功能与访问路径优化
代购小票制作网站有哪些,购物小票的简要说明?
如何正确下载安装西数主机建站助手?
义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?
c# 服务器GC和工作站GC的区别和设置
如何在腾讯云服务器上快速搭建个人网站?
宝塔Windows建站如何避免显示默认IIS页面?
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
如何注册花生壳免费域名并搭建个人网站?
建站之星云端配置指南:模板选择与SEO优化一键生成
在线教育网站制作平台,山西立德教育官网?
建站主机如何选?性能与价格怎样平衡?
一键制作网站软件下载安装,一键自动采集网页文档制作步骤?
建站之星后台密码遗忘或太弱?如何重置与强化?
建站之星如何助力网站排名飙升?揭秘高效技巧
建站主机选购指南:核心配置与性价比推荐解析
如何快速生成可下载的建站源码工具?
如何制作一个表白网站视频,关于勇敢表白的小标题?
西安大型网站制作公司,西安招聘网站最好的是哪个?
建站之星备案流程有哪些注意事项?
建站之星收费标准详解:套餐费用及年费价格表一览
如何在橙子建站中快速调整背景颜色?
如何做静态网页,sublimetext3.0制作静态网页?
临沂网站制作企业,临沂第三中学官方网站?
清除minerd进程的简单方法
音响网站制作视频教程,隆霸音响官方网站?
高防服务器如何保障网站安全无虞?
如何在橙子建站上传落地页?操作指南详解
如何快速生成ASP一键建站模板并优化安全性?
如何快速重置建站主机并恢复默认配置?
已有域名建站全流程解析:网站搭建步骤与建站工具选择
建站之星上传入口如何快速找到?
公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?
常州自助建站:操作简便模板丰富,企业个人快速搭建网站
如何通过智能用户系统一键生成高效建站方案?
如何通过cPanel快速搭建网站?
如何在阿里云香港服务器快速搭建网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。