写一个singleton
第一种:饱汉模式
public class SingleTon {
private SingleTon(){
}
//实例化放在静态代码块里可提高程序的执行效率,但也可能更占用空间
private final static SingleTon instance = new SingleTon();
public static SingleTon getInstance(){
return instance;
}
}
第二种:饥汉模式
public class SingleTon {
private SingleTon(){}
private static instance = null;//new SingleTon();
public static synchronized SingleTon getInstance(){
if(instance == null)
instance = new SingleTon();
return instance;
}
}
第三种:用枚举
public enum SingleTon{
ONE;
}
第三:更实际的应用(在什么情况用单例)
public class SequenceGenerator{
//下面是该类自身的业务功能代码
private int count = 0;
public synchronized int getSequence(){
++count;
}
//下面是把该类变成单例的代码
private SequenceGenerator(){}
private final static instance = new SequenceGenerator();
public static SingleTon getInstance(){
return instance;
}
}
第四:
public class MemoryDao
{
private HashMap map = new HashMap();
public void add(Student stu1){
map.put(SequenceGenerator.getInstance().getSequence(),stu1);
}
//把MemoryDao变成单例
}
Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。
一般Singleton模式通常有几种种形式:
第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。
public class Singleton {
private Singleton(){}
//在自己内部定义自己一个实例,是不是很奇怪?
//注意这是private 只供内部调用
private static Singleton instance = new Singleton();
//这里提供了一个供外部访问本class的静态方法,可以直接访问
public static Singleton getInstance() {
return instance;
}
}
第二种形式:
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//这个方法比上面有所改进,不用每次都进行生成对象,只是第一次
//使用时生成实例,提高了效率!
if (instance==null)
instance=new Singleton();
return instance;
}
}
其他形式:
定义一个类,它的构造函数为private的,所有方法为static的。
一般认为第一种形式要更加安全些
写一个singleton的更多相关文章
- 2018.7.20 编程题: 写一个Singleton出来。
编程题: 写一个Singleton出来. Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在. 一般Singleton模式通常有几种种形式: 第一种形式: 定义 ...
- java算法面试题:写一个Singleton出来
package com.swift; public class Singleton { public static void main(String[] args) { /* * 写一个Singlet ...
- Java编程题: 写一个Singleton出来
Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在. 一般Singleton模式通常有几种种形式: 第一种形式: 定义一个类,它的构造函数为private的, ...
- 编程题: 写一个 Singleton
Singleton 模式主要作用是保证在 Java 应用程序中,一个类 Class 只有一个实例存在.举例:定义 一个类,它的构造函数为 private 的,它有一个 static 的 private ...
- 写一个SingleTon,(饿最终、懒同步)
1.饿汉式: public class SingleTon { private SingleTon(){ } private final static SingleTon instance = new ...
- 写一个Singleton出来。
单例模式是一种创建模式. 这种模式只涉及一个单独的类,它负责创建自己的对象. 该类确保只创建单个对象. 这个类提供了一种访问其唯一对象的方法. 例子: MainWindow类的构造函数是私有的,并且有 ...
- 写一个Windows上的守护进程(6)Windows服务
写一个Windows上的守护进程(6)Windows服务 守护进程因为要开机启动,还要高权限,所以我就把它做成Windows服务了. 关于Windows服务的官方文档,大家可以看https://msd ...
- 写一个Windows上的守护进程(2)单例
写一个Windows上的守护进程(2)单例 上一篇的日志类的实现里有个这: class Singleton<CLoggerImpl> 看名字便知其意--单例.这是一个单例模板类. 一个进程 ...
- 写一个Windows上的守护进程(1)开篇
写一个Windows上的守护进程(1)开篇 最近由于工作需要,要写一个守护进程,主要就是要在被守护进程挂了的时候再把它启起来.说起来这个功能是比较简单的,但是我前一阵子写了好多现在回头看起来比较糟糕的 ...
随机推荐
- SQL Server的通用分页存储过程 未使用游标,速度更快!
经过一个下午的时间,和我一个同事(绝对是高手)的共同努力下,摸索出了以下的思路: 1.确定存储的输入参数: 1)SQL脚本,该参数接收完整的.正确的SQL检索文本,可将原应用中写好的SQL脚本直接传入 ...
- 在启动Windows Process Activation Service时,出现错误13:数据无效
在启动Windows Process Activation Service时,出现错误13:数据无效 1.错误原因: 当Windows Process Activation Service从C:\Wi ...
- fiddler链接手机
fiddler设置: 见python_request-上海悠悠 哪里有说 手机和window设置: 1,要把电脑防火墙关掉 2.手机访问http://ip:port安装Fiddler证书,特别注意IO ...
- [转]ASP.net Application 生命周期事件
生命周期事件和 Global.asax 文件 在应用程序的生命周期期间,应用程序会引发可处理的事件并调用可重写的特定方法.若要处理应用程序事件或方法,可以在应用程序根目录中创建一个名为 Global. ...
- webservice框架jersey 文章
webservice框架jersey简单总结 Jersey系列文章: Jersey框架一:Jersey RESTful WebService框架简介 Jersey框架二:Jersey对JSON的支持 ...
- 深度优先搜索DFS(二)
总结下图里面的常用模板: DFS(u){ vis[u]=true; for(从u出发能到达的所有顶点v){ if(vis[v]==false){ DFS(v); } } } DFSTrave(G){ ...
- linux shell 命令常用快捷键
下面是一些shell的常用快捷键,快捷键玩熟悉了在一定程度上是可以提高工作效率滴… Ctrl + a 切换到命令行开始 Ctrl + e 切换到命令行末尾 Ctrl + l 清除屏幕内容 Ctrl + ...
- 统计numpy数组中每个值的个数
import numpy as np from collections import Counter data = np.array([1.1,2,3,4,4,5]) Counter(data) #简 ...
- Ubuntu-14.04.1 desktop安装时及安装后遇到的小问题
ubuntu安装时,进入桌面就黑屏:ctrl+alt+F1进入终端1,输入:startx,此时桌面会重新出现,快速修改桌面的分辨率即可.没有及时修改可以重复上面操作. su root认证失败:sudo ...
- Spark分析之MemoryStore
private case class MemoryEntry(value: Any, size: Long, deserialized: Boolean) class MemoryStore(bloc ...