package singleton;

/**单例设计模式 饿汉式
*
* @author gx
*这种方式基于classloder机制避免了多线程的同步问题,不过,instance在类装载时就实例化,
*虽然导致类装载的原因有很多种,在单例模式中大多数都是调用getInstance方法,
* 但是也不能确定有其他的方式(或者其他的静态方法)导致类装载,
* 这时候初始化instance显然没有达到lazy loading的效果。
*/
public class Ehan {
private static Ehan instance=new Ehan();
private Ehan(){}
public static Ehan getInstance(){
return instance;
} } package singleton;
/**单例设计模式饿汉式 变种
* 类初始化即实例化instance。
* @author gx
*
*/
public class EhanVarietal {
private static EhanVarietal instance=null;
static{
instance=new EhanVarietal();
}
private EhanVarietal(){} public static EhanVarietal getInstance(){
return instance;
} } package singleton; /**
* 单例设计模式懒汉式,线程不安全
* @author gx
* 这种写法lazy loading很明显,但是致命的是在多线程不能正常工作。
*/
public class LanHan {
private static LanHan instance; // 私有构造方法
private LanHan() {
} // 提供公有的外部构造方法
public static LanHan getInstance() {
if (instance != null) {
instance = new LanHan();
}
return instance;
}
} package singleton; /**单例设计模式 懒汉式 线程安全
*
* @author gx
* 这种写法能够在多线程中很好的工作,
* 而且看起来它也具备很好的lazy loading,但是,遗憾的是,效率很低,99%情况下不需要同步。
*/
public class LanHanSafety { private static LanHanSafety instance; private LanHanSafety(){} public static synchronized LanHanSafety getInstance(){
if(instance==null){
instance=new LanHanSafety();
} return instance;
} } package singleton; /**单例设计模式 枚举类型
*
* @author gx
*
*/
public enum MeiJu {
INSTANCE; private String name;
private int age;
private MeiJu(){} public void whateverMethod(){} public static MeiJu getInstance(){
return INSTANCE;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} @Override
public String toString() { return this.name+"-----"+this.age;
} } package singleton; /**单例设计模式 静态内部类
*
* @author gx
*
*/
public class StaticInnerClass {
private static class StaticInnerClassHolder{
private static final StaticInnerClass INSTANCE=new StaticInnerClass();
}
private StaticInnerClass(){}
public static StaticInnerClass getInstance(){
return StaticInnerClassHolder.INSTANCE;
}
} package singleton; /**
* 单例设计模式 双重验锁
*
* @author gx
*
*/
public class YanSuo {
private volatile static YanSuo instance; private YanSuo() {
} public static YanSuo getInstance() {
if (instance == null) {
synchronized (YanSuo.class) {
if (instance == null) {
instance = new YanSuo();
}
}
}
return instance;
}
}

Java设计模式之单例设计模式总结的更多相关文章

  1. java软件设计模式只单例设计模式

    概述 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计 ...

  2. Java学习笔记——单例设计模式Singleton

    单例设计模式:singleton 解决的问题: 确保程序在运行过程中,某个类的实例instance只有一份. 特点: 1 构造函数私有化 2 自己内部声明自己 3 提供一个public方法,负责实例化 ...

  3. Java笔记(十一)……单例设计模式

    设计模式 解决某一类问题最行之有效的方法 Java中有23中设计模式 单例设计模式 解决一个类在内存中只存在一个对象 思路 将构造函数私有化 在类中创建一个本类对象 提供一个方法可以获取到对象 两种方 ...

  4. Java中常用来处理时间的三个类:Date、Calendar、SimpleDateFormate,以及Java中的单例设计模式:懒汉式、饿汉式以及静态内部类式

    (一)java.util.Date类 1.该类有一个long类型的属性:用来存放时间,是用毫秒数的形式表示,开始的日期是从1970年1月1号 00:00:00.    2.该类的很多方法都已经过时,不 ...

  5. java设计模式之单例设计模式

    单例设计模式 保证一个类在使用过程中,只有一个实例.优势就是他的作用,这个类永远只有一个实例. 优势:这个类永远只有一个实例,占用内存少,有利于Java垃圾回收. 单例设计模式关键点 私有的构造方法. ...

  6. java设计模式之单例设计模式和多例设计模式

    单例设计模式:构造方法私有化,在类的内部定义static属性和方法,利用static方法来取得本类的实例化对象:无论外部产生多少个实例化对象,本质上只有一个实例化对象 饿汉式单例设计 class Si ...

  7. Java设计模式之单例设计模式 入门实例

    一.基础概念 (1).单例设计模式:保证一个类在内存中的对象唯一性. (2).应用场景:数据都存储在配置文件的对象中,多个程序对同一个配置文件的对象进行操作.一个程序要基于另一个程序操作后的结果进行操 ...

  8. Java面向对象_单例设计模式

    单例设计模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点 1.构造方法私有化 2.声明一个本类对象 3.给外部提供一个静态方法获取对象实例 两种实现方式:饿汉式和懒汉式 何种情况下使用呢?当 ...

  9. 二·、spring成长之路——委派设计模式和单例设计模式

    3.委派设计模式 设计思想:就是多个类去完成一项的工作,其中一个类去分发任务,其他类做具体的任务,而具体表现是这个委派类的工作,具体过程是被委派类来操作的 [ITask.java]定义工作的统一标准 ...

随机推荐

  1. P2051 [AHOI2009]中国象棋[线性DP]

    最近智商有点不在线.其实一直不在线. 题目 先是想用$f[i][j][k][0/1/2]$表示摆了i行时有j列空着,k列有了一个炮,且当下摆了0/1/2个的状态,转移方程写的出来但是极其繁琐.于是又设 ...

  2. P1417烹调方案——背包问题中的排序

    题目:https://www.luogu.org/problemnew/show/P1417 与普通的01背包不同的一点是加入物品的顺序对结果有影响,这里可以考虑贪心的想法,把对全局影响最小的物品排在 ...

  3. TFS 备注

    1,更改任何文件, 先checkout, 再继续更改. 2. 更新sln时, 一定要更新include文件 3. 每次提交代码放到shelf上, 自己本地建立2个workspace, 来进行coder ...

  4. 获取.net对象的属性集

          int count = System. ComponentModel.TypeDescriptor .GetProperties( StudyInfo).Count ;           ...

  5. deleteMany is not a function

    问题: 同事使用了deleteMany方法用于删除数据,但是全公司只有我一个人报错deleteMany is not a function. 很自然,输出了model.deleteMany,得到的结果 ...

  6. 20.Consent Controller Get请求逻辑实现

    在这里之前讲的这一块的信息就要登场了 需要通过构造函数把这几个注入进来 县引入这三个命名空间 把这三个注入进来,这就是显示依赖 先通过returnUrl拿到这个Request request拿到后,就 ...

  7. C# 中的迭代器 yield关键字 提高性能和可读性

    展示一个例子 IList<string> FindBobs(IEnumerable<string> names) { var bobs = new List<string ...

  8. UVaLive 4727 Jump (递推)

    题意:约瑟夫环,求最后三个数. 析:f[i] = (f[i-1] + k) % i 这是求最后一个数时候,我们倒着推到第一个数时,只有一个数,所以当只有两个数时,就是另一数, 同理,我们可以求得第三个 ...

  9. 火狐浏览器httprequest插件添加和使用方法(适用于前后台分离,测试后台接口)

    第一步:打开火狐浏览器工具栏找到添加组件 1.如图1点击添加组件 第二步:添加组件Httprequest 1.如图2,检索Httprequest 2.如图3,将组件添加到火狐浏览器中 3.如图3.5, ...

  10. Unity surface shader 2

    UV滚动 Shader "Nafio/ScrollUV" { Properties { _Tex("T",2D) = "white" {} ...