设计模式【单例模式】
来源:互联网 发布:淘宝商家规则 编辑:程序博客网 时间:2024/06/05 22:57
Java中单例模式是一种常见的设计模式,单例模式分为:饿汉式单例模式、懒汉式单例模式、登记式单例模式、枚举式单例模式。作为对象的常见模式的单例模式,确保某一类只有一个实例,而且自行实例化并向整个系统提供这个实例。
单例模式的特点:
- 单例类只能有一个实例。
- 单例类必须自己创建自己的唯一实例。
- 单例类必须给所有其他对象提供这一实例。
举例说明:在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
【转载使用,请注明出处:http://blog.csdn.net/mahoking】
饿汉式单例模式用例:
/** * 饿汉式单例类 * @author Mahc * */public class EagerSingleton {private static EagerSingleton instance = new EagerSingleton();/** * 私有的构造方法/构造函数 */private EagerSingleton(){}/** * 静态工厂方法 * @return instance */public static EagerSingleton getInstance(){return instance;}}
饿汉式是典型的空间换时间,当类装载的时候就会创建类的实例,在未使用时,就已经创建出来,然后每次调用的时候,就不需要再判断,节省了运行时间。
懒汉式单例模式用例:
/** * 懒汉式单例类 * @author Mahc * */public class LazySingleton {private static LazySingleton instance = null;/** * 私有的构造方法/构造函数 */private LazySingleton(){}/** * 静态工厂方法 * 由于懒汉式的实现是线程安全的 ,所以使用了 synchronized * @return instance */public synchronized static LazySingleton getInstance() {if(instance == null){instance = new LazySingleton();}return instance;}}
懒汉式是典型的时间换空间,就是每次获取实例都会进行判断,看是否需要创建实例,浪费判断的时间。当然,如果一直没有人使用的话,那就不会创建实例,则节约内存空间。
由于懒汉式的实现是线程安全的,这样会降低整个访问的速度,而且每次都要判断,所以需要更好的实现方式。
登记式单例模式用例:
/** * 登记式单例类 * 类似Spring里面的方法,将类名注册,下次从里面直接获取。 * @author Mahc * */public class RegisterSingleton {private static Map<String, RegisterSingleton> map = new HashMap<String, RegisterSingleton>();static{RegisterSingleton singleton = new RegisterSingleton();map.put(singleton.getClass().getName(), singleton);}protected RegisterSingleton(){}/** * 静态工厂方法,返还此类惟一的实例 * @param name * @return */public static RegisterSingleton getInstence(String name){if(name == null){name = RegisterSingleton.class.getName();}if(map.get(name) == null){try {map.put(name, (RegisterSingleton)Class.forName(name).newInstance());} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}}return map.get(name);}}
登记式单例模式,使用Class加载器,辅助Map对象将Singleton的name作为key值保存Value(Singleton的实例对象)。
本例使用枚举的关键字 enum 枚举式单例模式用例:
public enum EnumSingleton {/** * 定义一个枚举的元素,它就代表了Singleton的一个实例。 * @author Mahc */uniqueInstance;}
测试各种样式的单例模式测试类:
public class TestSingleton {public static void main(String[] args) {//测试饿汉式模式EagerSingleton eagerSingleton01 = EagerSingleton.getInstance();EagerSingleton eagerSingleton02 = EagerSingleton.getInstance();if(eagerSingleton01 == eagerSingleton02){System.out.println("EagerSingleton\n" + true);}//测试懒汉式模式LazySingleton lazySingleton01 = LazySingleton.getInstance();LazySingleton lazySingleton02 = LazySingleton.getInstance();if(lazySingleton01 == lazySingleton02){System.out.println("LazySingleton\n" + true);}//测试登记式模式RegisterSingleton registerSingleton01 = RegisterSingleton.getInstence(null);RegisterSingleton registerSingleton02 = RegisterSingleton.getInstence(null);if(registerSingleton01 == registerSingleton02){System.out.println("RegisterSingleton\n" + true);}//枚举式模式EnumSingleton enumSingleton01 = EnumSingleton.uniqueInstance;EnumSingleton enumSingleton02 = EnumSingleton.uniqueInstance;if(enumSingleton01 == enumSingleton02){System.out.println("EnumSingleton\n" + true);}}}
【转载使用,请注明出处:http://blog.csdn.net/mahoking】
1 0
- 设计模式------单例模式
- 设计模式------单例模式
- 设计模式-单例模式
- 设计模式 - 单例模式
- 设计模式---单例模式
- 设计模式---单例模式
- 【设计模式】单例模式
- 设计模式-单例模式
- 设计模式----单例模式
- 设计模式--单例模式
- 设计模式-单例模式
- 设计模式-单例模式
- [设计模式] 单例模式
- 设计模式--单例模式
- 设计模式---单例模式
- 设计模式--单例模式
- 设计模式 -----单例模式
- 设计模式:单例模式
- 查看Android ADT 版本号,离线下载ADT
- [LeetCode]Maximum Product Subarray
- Mac下将libpomelo连接到Cocos2d-x的解决方案
- 阿里云主机 -- Ubuntu 12.04 - 创建用户失败的解决方法
- Beginning Adaptive Layout Tutorial
- 设计模式【单例模式】
- poj 2796(单调栈)
- ISS伪静态设置
- switch
- spring 集成 Hessian
- (二)XMPP协议学习笔记
- HDU 4756 Install Air Conditioning(MST + 树形DP)
- foreach 循环list嵌套list的
- 使用类型转换函数的简单例子