黑马程序员技术交流社区
标题:
设计模式:解决问题的一种行之有效的思想。
[打印本页]
作者:
刘海源
时间:
2012-7-23 22:16
标题:
设计模式:解决问题的一种行之有效的思想。
单例设计模式:
解决:保证了一个类在内存中只能有一个对象。
比如多程序访问同一个配置文件。希望多程序操作的都是同一个配置文件中的数据。
那么就需要保证该配置文件对象的唯一性。
思路:
怎么做才能保证这个对象是唯一的呢?
1,其他程序随时用new创建该类对象,无法控制个数。
结论:不让其他程序创建该类的对象。因为不可以控制。
2,不让其他程序创建,该类在本类中自己创建一个对象。
3,该类将创建的对象对外提供,让其他程序获取并使用。
步骤:
1,怎么实现不让其他程序该类对象呢?
将该类中的构造函数私有化。
2,在本类中创建一个本类对象。
3,定义一个方法,返回值类型是本类类型。让其他程序通过该方法就可以获取到该类对象。
*/
//饿汉式
class Single
{
private static Single s = new Single();//0x0078
private Single(){}
public static Single getInstance()//定义方法是为了可控。
{
return s;
}
/**/
}
//懒汉式
//单例的延迟加载方式。
class Single2
{
private static Single2 s = null;
private Single2(){}
public static Single2 getInstance()
{
if(s==null)
s=new Single2();
return s;
}
}
哪个更好点呢,比较一下帮我
作者:
李菁
时间:
2012-7-23 22:44
饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变。
懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的
当然是线程安全的好,所以个人推荐使用第一种
作者:
刘海源
时间:
2012-7-23 22:50
那是多线成问题啊,其实懒汉式也是可以的么,用一下双重判断就可以了么
//懒汉式
//单例的延迟加载方式。
class Single2
{
private static Single2 s = null;
private Single2(){}
public static Single2 getInstance()
{
if(s==null)
{
synchronized(Single2.class)//类对象作为锁
{
if(s==null)
s=new Single2();
}
}
return s;
}
}
作者:
梁志仲
时间:
2012-7-23 23:08
饿汉式简单、安全,缺点是一加载类就创建了对象,对象的生命周期长些,占用内存时间久些;
懒汉式代码多些,要加锁保证同步,在第一次需要使用时创建对象,稍为节省了一点点内存占用时间。
毕老师建议我们设计时用饿汉式,但面试时常考懒汉式。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2