您的位置:首页 > 移动开发 > Android开发

设计模式—单例模式

2014-01-10 10:11 176 查看
学习了android 里面的单例,详细参见 http://blog.csdn.net/singwhatiwanna/article/details/17056901,写的非常好,很清晰。
public class Singleton {

private static Singleton sSingleton;

private Singleton() {
}

public static Singleton getInstance() {
synchronized (Singleton.class) {

if (mSingleton == null) {
sSingleton = new Singleton();
}
return sSingleton;
}

}

}


由于是初学,了解了一下里面的几个不太熟悉的方法:

1.getInstance():

在java中,可以使用这种方式使用单例模式创建类的实例,所谓单例模式就是一个类有且只有一个实例,不像object ob=new object();的这种方式去实例化后去使用。

2.getInstance 和 new

 
  对象的实例化方法,也是比较多的,最常用的方法是直接使用new,而这是最普通的,如果要考虑到其它的需要,如单实例模式,层次间调用等等。直接使用new就不可以实现好的设计好,这时候需要使用间接使用new,即很多人使用的GetInstance方法。这是一个设计方式的代表,而不仅仅指代一个方法名。

 
2.1 new 的使用


如Object
_object = new Object(),这时候,就必须要知道有第二个Object的存在,而第二个Object也常常是在当前的应用程序域中的,可以被直接调用的.

  2.2getInstance的使用

在主函数开始时调用,返回一个实例化对象,此对象是static的,在内存中保留着它的引用,即内存中有一块区域专门用来存放静态方法和变量,可以直接使用,调用多次返回同一个对象。

两者区别对照:

大部分类(非抽象类/接口/屏蔽了constructor的类)都可以用new,new就是通过生产一个新的实例对象,或者在栈上声明一个对象 ,每部分的调用用的都是一个新的对象。

getInstance是少部分类才有的一个方法,各自的实现也不同。getInstance在单例模式(保证一个类仅有一个实例,并提供一个访问它的全局访问点)的类中常见,用来生成唯一的实例,getInstance往往是static的。

3. synchronized

synchronized
关键字,代表这个方法加锁,相当于不管哪一个线程(例如线程A),运行到这个方法时,都要检查有没有其它线程B(或者C、 D等)正在用这个方法,有的话要等正在使用synchronized方法的线程B(或者C 、D)运行完这个方法后再运行此线程A;没有的话,直接运行。当一个线程访问object的一个synchronized(this)同步代码块时,其他线程对object中所有其它synchronized(this)同步代码块的访问将被阻塞。

关于锁的用法 http://blog.csdn.net/dleej/article/details/6552340 这里有比较好的说明。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 单例