android单个对象_单例子模式

来源:互联网 发布:qq空间绑定独立域名 编辑:程序博客网 时间:2024/06/05 22:48
单例模式
一、单例模式:
是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。这个方法应该是静态方法(类方法),因为让类的实例去生成另一个唯一实例毫无意义。
单例模式有很多种 ,主要分为两种:懒汉式单例饿汉式单例

例:饿汉模式
public class Singleton {
//私有的创建一个对象
private static Singleton singleton=new Singleton();
//私有构造器
private Singleton() {

}
//返回Singleton对象方法
public static Singleton getSingleton(){
return singleton;
}
//打印输出
public void print(){
System.out.println("对象"+this);
}

} 
这种方式基于classloder机制避免了多线程的同步问题,不过,instance在类装载时就实例化,虽然导致类装载的原因有很多种,在单例模式 中大多数都是调用getInstance方法, 但是也不能确定有其他的方式(或者其他的静态方法)导致类装载,这时候初始化instance显然没有达 lazy loading的效果。


例:懒汉模式(1)
//创建自己本身对象
private static Singleton1 singleton1=null;

//私有化构造器
private Singleton1(){

}
//获得一个Singleton1对象
public Singleton1 geiInttance(){
if(singleton1==null)
{
singleton1=new Singleton1();
}
return singleton1;
}
注意这种致命的是在多线程不能正常工作。

例:懒汉模式(2)
//创建自己本身对象
private static Singleton1 singleton1=null;

//私有化构造器
private Singleton1(){

}
//获得一个Singleton1对象加锁
public synchronized Singleton1 geiInttance(){
if(singleton1==null)
{
singleton1=new Singleton1();
}
return singleton1;
}
这种写法能够在多线程中很好的工作,而且看起来它也具备很好的lazy loading,但是,遗憾的是,效率很低,99%情况下不需要同步。



原创粉丝点击