设计模式笔记之----单例模式
来源:互联网 发布:g71格式编程哈斯系统 编辑:程序博客网 时间:2024/05/18 02:00
单例用的就比较多并且广了,说的是 某个单例类,只在内存中创建唯一一个实例,比如android中application,只有一个实例,只初始化一次,又比如window的资源管理器,不管你开多少个,永远只有一个在运行。好处是节省资源,尤其是对于频繁访问的类。
要写单例模式,我认为最重要的是什么时候实例化这个类,有以下几种可以:
1.类初始化就产生实例
2.在方法里面写,类初始化实例化,在调用方法才实例化
那么单例的创建方式有4中(其实是5种,只不过有一种因为不推荐使用,就不学习了),这种写法分类来自尚学堂的老师。
饿汉法:
这个写法是类在初始化就已经完成单例的创建的,不可以延迟操作
package SinglePattern;/** * 这是类初始化就马上加载,恶汉 * @author cloudhuan * */public class SinglePattern02 { //这里类初始化都是线程安全的 private static final SinglePattern02 PATTERN02 = new SinglePattern02(); private SinglePattern02(){}; public static SinglePattern02 getInstance(){ return PATTERN02; }}
懒汉法:
这个可以实现延迟加载,但是对于多线程来说效率是最低的,因为有一个synchronized 同步锁,创建过程可能会等待。
package SinglePattern;/** * 这个可以延迟加载,真正使用的时候才去加载,懒汉 * 类加载都是线程安全的,但是这里需要加同步锁 * @author cloudhuan * */public class SingleInstance01 { public static SingleInstance01 singleInstance; //可能有多个方法去用,所以要同步,不加可能还是会造成多个对象 public static synchronized SingleInstance01 getInstance(){ if(singleInstance == null){ return new SingleInstance01(); } return singleInstance; } public void printHello(){ System.out.println("hello"); }}
静态内部类法:
是最推荐的写法,把实例化放在静态内部类里面,在有需要才会加载内部类,并且类初始化是天然同步的。
package SinglePattern;/** * 静态内部类的加载方式,用的最多的,集合懒汉和恶汉的优点 * 1.类加载是天然线程安全的 * 2.用到才加载 * @author cloudhuan * */public class SinglePattern03 { private static class SingleInst{ private static SinglePattern03 pattern03 = new SinglePattern03(); } private SinglePattern03(){} public static SinglePattern03 getInstance(){ return SingleInst.pattern03; }}
枚举法:
当不需要延迟加载就用这个吧,因为枚举类型是系统自带的单例模式,没有什么BUG,写法也是超级简单的
package SinglePattern;/** * 这是通过枚举方式的,枚举的类型就是系统自带的单例模式 * @author cloudhuan * */public enum SinglePattern04 { INSTANCE("aaa"); SinglePattern04(String str){ System.out.println(str); }}
上面四种方式,推荐的是枚举和静态内部类模式,效率最高。
0 0
- 设计模式笔记之---单例模式
- 设计模式笔记之单例模式
- 设计模式笔记之----单例模式
- 设计模式笔记之单例模式
- 学习笔记07-设计模式之单例设计模式
- 设计模式笔记之——单例设计模式
- 设计模式之单例学习笔记
- 设计模式笔记之单例模式(Singleton Pattern)
- 设计模式学习笔记(一)之单例模式(Singleton)
- 设计模式之01单例模式(笔记)
- 深入浅出设计模式笔记之二:单例模式
- 研磨设计模式学习笔记之单例模式
- java设计模式笔记之单例模式
- 设计模式学习笔记之单例模式
- Java设计模式学习笔记之单例模式
- 设计模式学习笔记之单例模式
- Java学习笔记---设计模式之单例模式
- java学习笔记-设计模式之单例模式
- JavaScript 正则表达式的规则和使用
- Android 如何永久性开启adb 的root权限
- 魔术方法的应用
- [python]爬虫存入本地
- 制作水果忍者-JS-4
- 设计模式笔记之----单例模式
- 【微信开发】-- 企业转账到用户_0
- 10.3.2
- 如何申请试用Drone2Map?
- 贪心四部曲
- 已知二叉树的前序遍历和中序遍历重建二叉树(二叉树)
- 基础练习 Huffuman树
- 【译】延迟加载JavaScrip
- Linux 实用命令