您的位置:首页 > 其它

设计模式:创建型模式之单例模式

2013-10-04 02:35 204 查看
创建型模式(Creational Pattern)
对类的实例化过程的抽象化,提供对象的创建和管理职责。
创建型模式:

①单例模式
②工厂方法模式
③抽象工厂模式
④建造者模式
⑤原型模式

在Java中,单例模式的实现表现形式有:①饿汉式单例类:类加载,对象实例化;②懒汉式单例类:引用时即对象实例化。
看看恶汉式单例类的代码:
public class Singleton{
private static Singleton m_instance = new Singleton(); //让外界无法直接实例化 private Singleton(){ } //获取实例对象 public static Singleton getInstance(){ return m_instance; } }
可以看出,类加载时,静态变量m_instance会被初始化,外部也无法直接创建Singleton对象,只能直接调用它的静态方法getInstance来得到其对象。这就实现了一个类被加载时,对象也就创建出来了,并且只有一个!

看看懒汉式单例类的代码:
public class Singleton{
private static Singleton _instance = null;
//让外界无法直接实例化
private Singleton(){
}
//同步,多线程下只能创建一个实例
synchronized public static Singleton getInstance(){
if(_instance == null){
_instance = new Singleton();
}
return _instance;

}
}
可以看出,懒汉式使用多线程环境下synchronized,这样每次只能实例化一个对象。

饿汉式与懒汉式的区别:
①:饿汉式是加载时实例花,懒汉式是引用时实例化;
②:饿汉式资源利用率较差,反应时间和和速度较好;
③:饿汉式易在java中实现,不易在c++中实现。

单例模式的优点:

①:减少内存开支;
②:减少系统性能开销;
③:避免对资源的多重占用;
④:优化和共享资源访问。
缺点:;
①:无法创建子类,扩展困难;
②:对测试不利;
③:单例模式与单一职责原则冲突。

什么时候使用单例模式?
a.要求生成唯一序列号的环境;
b.在项目中需要一个共享访问点或共享数据;
c.创建一个对象需要消耗的资源过多(IO、数据库);
d.需要大量定义静态常量和静态方法的环境。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息