【设计模式】之单例模式
来源:互联网 发布:centos 6.5 yum配置 编辑:程序博客网 时间:2024/06/05 08:04
单例模式(Singleton Pattern):
确保某个类只有一个对象。单例类的构造器是私有的(private),避免外界利用构造器直接创建出任意多的实例。由于构造器是private的,因此单例类是不能被继承。
特点:
1>、单例类只能有一个实例。
2>、单例类必须自己创建自己的唯一实例。
3>、单例类必须给所有其他对象提供这一实例。
单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。
1、饿汉式单例
package 单例模式;/** * 饿汉式单例:自己将自己实例化 * 在这个类被加载时,静态变量instance会被初始化,此时类的私有构造器被调用,这时单例类的唯一实例就被创建了。 * @author xcbeyond * @date 2012-5-1 上午11:56:26 */public class EagerSingleton {private static final EagerSingleton instance = new EagerSingleton();//私有构造器private EagerSingleton() {}public static EagerSingleton getInstance() {return instance;}}
2、懒汉式单例
与饿汉式单例不同的是,懒汉式单例类在第一次被引用时将自己实例化。如果加载器是静态的,那么在懒汉式单例类被加载时不会将自己实例化。
package 单例模式;/** * 懒汉式单例 * @author xcbeyond * @date 2012-5-1 下午12:23:54 */public class LazySingleton {private static LazySingleton instance = null;//私有构造器private LazySingleton(){}//静态工厂方法,返回此类的唯一实例synchronized public static LazySingleton getInstance () {if(instance == null ) {instance = new LazySingleton();}return instance;}}
3、登记式单例
为了克服饿汉式单例类和懒汉式单例类不可继承的缺点,于是引入了登记式单例类。
package 单例模式;import java.util.HashMap;/** * 登记式单例类:克服了饿汉式和懒汉式单例类的不可继承的缺点。 * @author xcbeyond * @date 2012-5-1 下午12:35:23 */public class RegisterSingleton { private static HashMap reg = new HashMap();static {RegisterSingleton x = new RegisterSingleton();reg.put(x.getClass().getName(), x);}//保护的默认构造器protected RegisterSingleton () {}//静态工厂方法,返回此类唯一的实例public static RegisterSingleton getInstance(String name) {if(name == null) {name = "RegisterSingleton";}if(reg.get(name)==null) {try{reg.put(name, Class.forName(name).newInstance());}catch(Exception e) {System.out.println("Error happened");}}return (RegisterSingleton)reg.get(name);}}
- 设计模式之 单例设计模式
- 设计模式之 单例设计模式
- 设计模式之单例设计模式
- 设计模式之-----------单例设计模式
- 设计模式之:单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之-单例设计模式
- 设计模式之单例设计模式 标签: 设计模式
- 设计模式之单例
- 设计模式之单例
- 设计模式之 单例
- 库依赖总结
- VC++ UTF-8与GBK格式转换
- VC字符串
- 让C/C++程序一次编译可以发布到多版本Linux之上
- 第十二周实验报告三
- 【设计模式】之单例模式
- Android Crash分析工具arm-eabi-addr2line
- 记事本代码
- import static和import的区别
- java学习笔记
- pure virtual function called--虚函数调用错误
- 第十二周实验报告一
- 分享来自逐浪CMS的ASP.NET应该遵守的9条代码编写规范
- STL经典算法集锦<八>之IntroSort