Singleton

问题:编写一个Singleton类

 简单的方式

 1 package cn.changb.singleton;
 2 
 3 /**
 4  * 简单的方式:弊端是在并发执行时,14行处可能存在多个实例
 5  */
 6 public class SingletonDemo1 {
 7     private static SingletonDemo1 INSTANCE;
 8 
 9     private SingletonDemo1() {
10     }
11 
12     public static SingletonDemo1 getInstance() {
13         if (INSTANCE == null) {
14             INSTANCE = new SingletonDemo1();
15         }
16         return INSTANCE;
17     }
18 }

 公共域方式

 1 package cn.changb.singleton;
 2 
 3 /**
 4  * 公共域方式:简单,不存在并发出现多实例的问题,但弊端是返回实例时增加一些额外的逻辑
 5  */
 6 public class SingletonDemo2 {
 7     public static final SingletonDemo2 INSTANCE = new SingletonDemo2();
 8 
 9     private SingletonDemo2() {
10     }
11 }

 工厂化方式

 1 package cn.changb.singleton;
 2 
 3 /**
 4  * 工厂化方式:可以在实例化过程中(11行处)添加逻辑
 5  */
 6 public class SingletonDemo3 {
 7     private static final SingletonDemo3 INSTANCE = new SingletonDemo3();
 8 
 9     private SingletonDemo3() {
10     }
11 
12     public static SingletonDemo3 getInstance() {
13         return INSTANCE;
14     }
15 }

 枚举类方式

 1 package cn.changb.singleton;
 2 
 3 /**
 4  * 枚举类方式:最佳实践,推荐方式
 5  * 
 6  * 不存在多个实例问题、反序列化问题!
 7  */
 8 public enum SingletonDemo4 {
 9     INSTANCE;
10 }

 SingletonTest

 1 package cn.changb.singleton;
 2 
 3 public class SingletonTest {
 4 
 5     public static void main(String[] args) {
 6         // TODO Auto-generated method stub
 7         System.out.println("SingletonDemo1" + SingletonDemo1.getInstance());
 8         System.out.println("SingletonDemo1" + SingletonDemo1.getInstance());
 9 
10         System.out.println("SingletonDemo2" + SingletonDemo2.INSTANCE);
11         System.out.println("SingletonDemo2" + SingletonDemo2.INSTANCE);
12 
13         System.out.println("SingletonDemo3" + SingletonDemo3.getInstance());
14         System.out.println("SingletonDemo3" + SingletonDemo3.getInstance());
15 
16         System.out.println("SingletonDemo4" + SingletonDemo4.INSTANCE);
17         System.out.println("SingletonDemo4" + SingletonDemo4.INSTANCE);
18     }
19 
20 }

转载于:https://www.cnblogs.com/cb0327/p/5672070.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/287037.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flutter之运行提示Could not update files on device: Connection closed before full header was received

1 问题 运行flutter app提示错误如下 Performing hot restart... Syncing files to device MIX 3... Could not update files on device: HttpException: Connection closed before full header was received, uri http://127.0.0.1:65054/-tzvW6oGieQ/ Restarted applicati…

C++ 语法都不会怎么写代码? 03

作者简介 作者名:1_bit 简介:CSDN博客专家,2020年博客之星TOP5,蓝桥签约作者。15-16年曾在网上直播,带领一批程序小白走上程序员之路。欢迎各位小白加我咨询我相关信息,迷茫的你会找到答案。系列教程将会…

自定义dialog弹窗html,自定义H5页面dialog弹窗

弹窗一:样式如下:HTML代码://弹出窗通知取消确认//遮罩层$(.dialog .content).text(text);$(.dialog, .mark).removeClass(hide);}tipDialog("1111");$(".sure").click(function(){var type $(this).attr(type);if(typeb…

【三维激光扫描】第二章:国内外三维激光扫描设备简介

地面三维激光扫描仪是地面激光扫描系统中最主要的硬件设备,近年来得到了快速发展,主要体现在品牌数量、性能指标、类型等方面的变化。本章主要介绍国内外主要设备的基本情况,对国内外研究现状进行分析,最后指出目前存在的问题与未来的发展趋势。 2.1 国外地面三维激光扫描仪…

Winform定时启动

System.Timers.Timer t;int sum 0;int qian;int bai;int shi;int ge;public 测试定时启动(){InitializeComponent();}//1.使用System.Timers.Timer//2.threadThread th;//定义线程private void 测试定时启动_Load(object sender, EventArgs e){textBox1.Text "00.00&quo…

聊一聊容器暂停退出

1背景介绍 最近在写 docker 相关教程,过程中发现容器暂停退出竟然有 docker kill、docker stop 和 docker pause 三种方式,今天就来分析下三者间的区别。2辅助指令 docker top - 查看容器进程docker event - 查看容器相关事件docker stats -…

初学者必看的文章:在VM12中安装 RedHat RHEL7.2  系统的详细步骤:看我如何操纵RHEL系统...

一、开始安装 1)新建虚拟机 RHEL7.2 2)成功引导系统--开机出现此画面 Install Red Hat EnterpriseLinux 7.2 安装RHLE7.2 操作系统 Test this edia & install RedHat Enterpris…

Flutter之点击按钮打开百度链接

1 需求 点击按钮,打开百度链接 2 代码实现 import package:flutter/material.dart; import package:url_launcher/url_launcher.dart;void main() {runApp(MyApp1()); }class MyApp1 extends StatelessWidget {overrideWidget build(BuildContext context) {return…

用计算机算出你喜欢吃你喜欢的人,Go for it七年级下学期1-12单元(期末复习)句子翻译专练...

Go for it七年级下学期1-12单元(期末复习)句子翻译专练Unit11.你的笔友是哪里人?Where is your _________ _______ _________? ( pe n , pal , from )2.他是澳大利亚人.He is ________ _________. (is, from, Australian)3.他住在哪里?Where __________ he________. (does ,…

因为我的名字特殊大家都是用异样的眼光在看着我 04

作者简介 作者名:1_bit 简介:CSDN博客专家,2020年博客之星TOP5,蓝桥签约作者。15-16年曾在网上直播,带领一批程序小白走上程序员之路。欢迎各位小白加我咨询我相关信息,迷茫的你会找到答案。系列教程将会…

【三维激光扫描】第三章:点云数据采集

第一节 野外扫描方案 为了获取高精度完整的点云数据,工作过程-般包括项目计划制订、 外业数据采集和内业数据处理三个环节。《规程)中指出地面三维激光扫描总体工作流程应包括技术准备与技术设计、控制测量、数据采集、数据预处理、成果制作、质量控制与成果归档。本章首先闸…

undefined reference to 问题解决方法

最近在Linux下编程发现一个诡异的现象,就是在链接一个静态库的时候总是报错,类似下面这样的错误: (.text0x13): undefined reference to func 关于undefined reference这样的问题,大家其实经常会遇到,在此&#xff0c…

WPF 实现扇形统计图

扇形统计图原文作者:ArcherSong博客地址:https://www.cnblogs.com/ganbei/绘制一个扇形原理也是基于Canvas进行绘制;ArcSegment[1]绘制弧形;绘制指示线;绘制文本;鼠标移入动画;显示详情Popup;源码Github[2]…

Codeforces Round #359 div2

Problem_A(CodeForces 686A): 题意:\[ 有n个输入, \space d_i代表冰淇淋数目增加d_i个, -\space d_i表示某个孩纸需要d_i个, 如果你现在手里没有\space d_i个冰淇淋, 那么这个孩纸就会失望的离开。\] 你初始有x个冰淇淋…

Flutter之测试Http和HttpClient

1 测试Http和HttpClient 导入包:在pubspec.yaml里面导入 http: ^0.12.2 main.dart里面导入 import package:http/http.dart as http; import dart:convert; import dart:io; 2 代码实现 import package:flutter/material.dart; import package:url_launcher/url_lau…

基于zookeeper的solrCloud集群搭建

1.安装及搭建相关环境 1.1环境准备 centos7,jdk1.8,tomcat8,zookeeper3.4.X,solr4.10.X 链接: https://pan.baidu.com/s/1i47IuKd 密码: emqt 2.zookeeper集群搭建 2.1复制zookeeper [rootMiWiFi-R3-srv ~]# mkdir /usr/local/solr-cloud [rootMiWiFi-R3-srv ~]# cp -r zookee…

【小白必懂】C语言求完全数

注意:学生党如果存在付费问题可以加我好友,我可以开单篇短时间的免费哟~ 私聊我就好~ 情景再现 👸小媛:小C,你知道什么是完全数吗? 🐰小C:知道呀,难道是今天老师又出题…

【三维激光扫描】第四章:点云数据处理

第一节 点云数据处理流程 由于外业获取点云数据时的多种因素影响,点云数据质量直接影响到三维建模等方面的应用,点云数据处理环节非常重要。本章主要介绍数据处理流程,数据的配准:滤波、缩减、分割、分类,最后介绍点云数据应用。 5.1 数据处理流程 5.1.1 数据处理软件 …

台式计算机硬件输入设备,台式电脑硬件配置有哪些

台式电脑硬件配置你知道有哪些?电脑的配置一般是指电脑的硬件配件的高档程度、性价比等,电脑的性能好坏主要决定于以下主要硬件配置。一起来看看台式电脑硬件配置有哪些,欢迎查阅!组装台式电脑配置1、实用性机型建议:首选1:intel…

mysql 如何用一条SQL将一张表里的数据插入到另一张表 3个例子

1. 表结构完全一样 insert into 表1select * from 表2 2. 表结构不一样(这种情况下得指定列名) insert into 表1 (列名1,列名2,列名3)select 列1,列2,列3 from 表2 3、只从另外一个表取部分值 insert into 表1 (列名1,列名2,列名3) values(列1,列2,(sel…