设计模式—单例模式
2014-01-10 10:11
176 查看
学习了android 里面的单例,详细参见 http://blog.csdn.net/singwhatiwanna/article/details/17056901,写的非常好,很清晰。
由于是初学,了解了一下里面的几个不太熟悉的方法:
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 这里有比较好的说明。
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 这里有比较好的说明。
相关文章推荐
- Java设计模式之适配器模式
- 追MM与Java的23种设计模式
- jsp的设计模式基础:view helper模式
- 设计模式入门-设计模式的原则
- 每天一设计模式之单例模式
- 如何使用设计模式来构造系统--(2)
- 从追美眉(MM)谈谈23种设计模式!
- 设计模式详细系列教程 (四) 无处不在的单例模式
- 设计模式学习笔记(5) - 策略模式
- 设计模式 09 单例模式
- java设计模式---模板方法模式
- C++设计模式——建造者模式
- 【设计模式】 之 简单工厂
- 设计模式--10、工厂方法和抽象工厂模式
- 每天一个设计模式(1):策略模式
- java设计模式—策略模式
- java设计模式-模板方法
- 设计模式_简单工厂模式概述和使用
- 设计模式之简单工厂模式 工厂模式
- [置顶] Java设计模式-单例模式