在Android操作系统中,常常使用到一种模式----单例模式。其实我们在项目开发过程中,也经常用到;例如:在C/S模式中,我们对工具栏的初始化;点击按钮弹出的对话框等。通常我们用一个全局变量使得一个对象访问,但它不能防止实例被多次实例化;最好的办法就是让类直接管理自己的实例对象,并返回实例对象。
什么是单例模式?保证一个类中仅有一个实例;并提供一个访问它的全局访问点。也就是说,一个类中他的所有构造方法为private类型,这样保证只能在类中创建对象;在类中声明一个全局的类对象实例;第三,在类当中应该定义一个方法用于创建并返回当前唯一的对象实例。
我们在代码设计的时候,有两种方式实现:饿汉式单例模式和懒汉式单例模式。饿汉模式是在类中定义并创建了并创建了对象;而懒汉式则是在需要用的时候,调用对外的方法判断并创建对象;各有各的好处,大家在使用的时候需要灵活应用。
//懒汉式单例模式
class Singleton
{
private static Singleton singleton;
private Singleton()
{}
public static Singleton getInstance()
{
if(singleton==null)
{
singleton=new Singleton();
}
return singleton;
}
}
//饿汉式单例模式
public class sealed Singleton
{
private static readonly Singleton singleton=new Singleton();
private Singleton()
{}
public static Singleton getInstance()
{
return singleton;
}
}
到这里,咱们已经基本把原理弄清楚了;在多线程的时候,我们需要重新改改代码、用双重锁的方式(饿汉模式也可以,但是它在加载的时候就创建了对象实例,这样会占用内存;直到运行结束);要不然就会出现多个对象实例了。
//双重锁防止多次创建对象实例
class Singleton
{
private static Singleton singleton;
private static readonly object obje=new object();
private Singleton()
{}
public static Singleton getInstance()
{
if(singleton==null)
{
//借用一个对象实例来锁定代码区域,
lock(obje)
{
//保证即使有两个线程同时进入线程排队后,也只创建一次实例
if(singleton==null)
{
singleton=new Singleton();
}
}
}
return singleton;
}
}