【设计模式】《Head First 设计模式》读书笔记——单件模式
2016-11-09 23:13
447 查看
单件模式:
确保一个类只有一个实例,并提供一个全局访问点。问题简单描述:
像线程池、缓存、对话框等的对象我们只需要一个,如果出现多个对象会出现许多问题。如果用全局变量,假如是一个非常耗费资源的对象,但是程序的一次执行中一直没有用到这个对象就形成了浪费。解决思路:
提供一个私有构造器、一个静态方法和一个静态变量。私有构造器确保不被其他类构造,通过静态方法来实例化对象,静态变量用来判断类是否被实例化过。UML图:
实现代码:
经典单件模式,多线程不安全package singleton; public class Singleton { private static Singleton uniqueInstance; private Singleton(){ } public static Singleton getInstance(){ //因为uniqueInstance==null非线程安全 if(uniqueInstance==null){ uniqueInstance=new Singleton(); } return uniqueInstance; } }把getInstance编程同步方法,会消耗性能
package singleton; public class Singleton { private static Singleton uniqueInstance; private Singleton(){ } //线程安全,但每次调用的时候都同步消耗性能,而且实际上只需要在第一次实例化的时候同步 public static Singleton getInstance(){ if(uniqueInstance==null){ uniqueInstance=new Singleton(); } return uniqueInstance; } }在静态初始化器重创建单件,非延迟实例化,可能造成浪费
package singleton; public class Singleton { private static Singleton uniqueInstance=new Singleton(); private Singleton(){ } public static synchronized Singleton getInstance(){ return uniqueInstance; } }”双重检查加锁“,减少getInstance()中同步(需java1.5及以上版本)
package singleton; public class Singleton { //volatile用来修饰被不同线程访问和修改的变量 private volatile static Singleton uniqueInstance; private Singleton(){ } public static Singleton getInstance(){ if(uniqueInstance==null){ //只有第一次实例化的时候才同步 synchronized (Singleton.class) { if(uniqueInstance==null){ uniqueInstance=new Singleton(); } } } return uniqueInstance; } }单件模式就是确保程序中只有一个实例化对象的一种方法,一些处理共享信息的类多个对象会出现问题。单件模式相比于全局变量的优势在于延迟实例化,避免了可能出现的浪费。还要注意如果程序存在多个类加载器,可以自行指定类加载器,指定同一个类加载器。可以根据不同的场景选择单件模式的实现方法。
欢迎批评指正^ ^
相关文章推荐
- 【设计模式】《Head First 设计模式》读书笔记——外观模式
- 《Head First 设计模式》读书笔记之1:设计模式入门(策略模式)
- 【设计模式】《Head First 设计模式》读书笔记——状态模式
- 【设计模式】《Head First 设计模式》读书笔记——迭代器模式
- 【设计模式】《Head First 设计模式》读书笔记——模板方法模式
- 【设计模式】《Head First 设计模式》读书笔记——适配器模式
- 【设计模式】《Head First 设计模式》读书笔记——命令模式
- C#面向对象设计模式:Singleton 单件(创建型模式)
- 设计模式杂谈:创建型模式之单件模式(Singleton)
- .NET设计模式:单件模式(Singleton Pattern)
- 设计模式(五)[单件(Singleton)模式]
- .NET设计模式-单件模式(Singleton Pattern)
- [整理]C#面向对象设计模式纵横谈(2):Singleton单件(创建型模式)
- 企业设计模式读书笔记 Transaction Script
- 设计模式学习笔记(二)——Singleton单件模式
- 也谈单件模式类的设计(C++)
- .NET设计模式(2):单件模式(Singleton Pattern)
- 设计模式学习笔记(二)——Singleton单件模式
- 探索设计模式(2):单件模式(Singleton Pattern)
- 设计模式学习---单件模式