JAVA设计模式之单例模式(创建型)
来源:互联网 发布:cnc编程软件排行榜 编辑:程序博客网 时间:2024/05/16 01:55
1,饿汉式
优点:线程安全,调用效率高
package com.imust.gof.demo;/** * 测试饿汉式单例:特点:线程安全,(天然的线程安全模式) * 设计模式 * 创建型模式:单例模式,工厂模式,抽象工厂模式,建造者模式,原型模式 * 结构型模式:适配器模式,桥接模式,装饰模式,组合模式,外观模式,享原模式,代理模式 * 行为型模式:模版方法模式,命令模式,迭代模式,观察器模式,中介者模式,备忘录模式,解释器模式,状态模式,策略模式,职责链模式,访问者模式 * * @author Zhang.Zhi.Fei 2017年9月5日 * */public class singletonDemo1 { private static singletonDemo1 instance = new singletonDemo1();//类初始化时候立即加载 private singletonDemo1(){} public static singletonDemo1 getInstance(){ return instance; }}
懒汉式:
优点,调用效率低,方法同步
package com.imust.gof.demo;/** *懒汉式 不初始化,延迟加载,真正用的时候才加载 * 设计模式 * 创建型模式:单例模式,工厂模式,抽象工厂模式,建造者模式,原型模式 * 结构型模式:适配器模式,桥接模式,装饰模式,组合模式,外观模式,享原模式,代理模式 * 行为型模式:模版方法模式,命令模式,迭代模式,观察器模式,中介者模式,备忘录模式,解释器模式,状态模式,策略模式,职责链模式,访问者模式 * * @author Zhang.Zhi.Fei 2017年9月5日 * */public class singletonDemo2 { private static singletonDemo2 instance =null;//类初始化时候立即加载 private singletonDemo2(){} //调用效率低,方法同步 public static synchronized singletonDemo2 getInstance(){ if(instance == null){ instance = new singletonDemo2(); } return instance; }}
静态内部类实现单例模式
package com.imust.gof.demo;/** * 静态内部类实现方式(也是一种懒加载方式) * * -- 外部类没有static属性,则不会像饿汉式那样立即加载对象 * -- 只有真正调用getinstance(),才会加载静态内部类,加载类时是线程安全的。instance是static final * 类型,保证了内存中只有这样一个实例存在,而且只能被赋值一次,从而保证了线程安全性 * -- 兼备了并发高效调用和延迟加载的优势 * * * @author Zhang.Zhi.Fei 2017年9月5日 * */public class SingletonDemo04 { private static class SingletonClassInstance{ private static final SingletonDemo04 instance = new SingletonDemo04(); } public static SingletonDemo04 getInstance(){ return SingletonClassInstance.instance; } private SingletonDemo04(){}}
枚举类实现单例模式
package com.imust.gof.demo;/** * 测试枚举实现单例模式 (没有懒加载,演示加载) * @author Zhang.Zhi.Fei 2017年9月5日 * */public enum SingletonDemo5 { //这个枚举元素,本身就是单例 INSTANCE; //添加自己需要的操作 public void SingletonOperation(){ }}
以懒汉式单例为例子测试防止序列化破解单例
package com.imust.gof.demo;import java.io.Serializable;/** * 测试懒汉式单例模式(如何防止反射和反序列化) * @author Zhang.Zhi.Fei 2017年9月5日 * */public class SingletonDemo6 implements Serializable{ private static SingletonDemo6 instance; private SingletonDemo6(){ if(instance != null){ **//为了防止被反射破解 throw new RuntimeException();** } } public static synchronized SingletonDemo6 getInstances(){ if(instance == null){ instance = new SingletonDemo6(); } return instance; }}
阅读全文
1 0
- java设计模式(创建型)之单例模式
- JAVA设计模式之单例模式(创建型)
- Java设计模式之创建型模式--单例模式
- Java设计模式之创建型模式-单例模式(Singleton)
- java 设计模式-创建模式之单例模式
- java设计模式 -------- 创建模式 之 单例模式
- java设计模式 -------- 创建模式 之 单例模式【转】
- 创建型:设计模式之单例模式(三)
- Java设计模式(3)创建型:单例模式
- 设计模式之----创建型模式(三)-----单例模式
- 设计模式 创建型模式之单例模式
- 设计模式之创建型模式---单例模式
- 设计模式之创建型模式(1)--单例模式
- 「大冰撸设计模式」java 创建型模式之单例模式
- Java 设计模式之单例模式的详解(创建模式)
- java设计模式之创建模式(工厂模式,Builder,单例,原型)
- JAVA设计模式创建模式之单态模式
- 设计模式-单例模式(创建型模式)
- 数字颠倒
- LeetCode-14-Longest-Common-Prefix 求若干字符串的最大公共前缀
- Is Derek lying?
- 小白入住 ,应要求写博客
- JQuery选择器
- JAVA设计模式之单例模式(创建型)
- 3670: [Noi2014]动物园
- 分布式任务队列与任务调度系统Celery进阶——分布式爬虫
- java中变量的存放位置
- 对于mmap函数错误的理解
- python web py入门-3-URL映射
- Watchdog死锁实例分析
- 应用层数据传递之http协议
- 爬虫涉及若干问题