黑马程序员技术交流社区
标题:
单例设计模式总结
[打印本页]
作者:
a80C51
时间:
2015-9-5 14:52
标题:
单例设计模式总结
1,设计模式:定义解决某一类问题最行之有效的方法。
2,单例设计模式:解决一个类在内存中只能存在一个对象。该类即为单例类。
3,设计思想及步骤
a)禁止其他程序建立该类的对象------将构造器私有化;
b)可以让其他程序访问该类对象,只能在本类中自定义一个对象---------创建一个本类对象;
c)为方便其他程序对自定义对象的访问,可以对外提供一些方法---------提供方法以便获取该对象。
4,何时使用单例设计模式
当事物存在唯一性时,即可使用单例设计模式。
5,分类:
饿汉式
代码如下:
class SingleForAHungryMan
{
private SingleForAHungryMan(){}
private static SingleForAHungryMan s = new SingleForAHungryMan();
public static SingleForAHungryMan getInstance()
{
return s;
}
}
复制代码
特点:该类一进内存,就已经建立好对象。
懒汉式:
代码如下:
class SingleForALazyMan
{
private SingleForALazyMan(){}
private static SingleForALazyMan s;
public static SingleForALazyMan getInstance()
{
if(s == null)
{
synchronized(SingleForALazyMan.class)
{
if(s==null)
s = new SingleForALazyMan();
}
}
return s;
}
}
复制代码
特点:
该类进内存中,对象还没有存在,只有调用对应的getInstance()方法时,才建立对象;
缺点:
在多线程编程时,可能会存在创建多个该实例。而为了解决这个问题,不得不引引入synchronized概念。上述方法,虽比较有效解决该问题,但代码的行数变多,空间变多。这也是空间换时间的一个例子。
故一般建议使用饿汉式;
附:
测试代码如下:
public class SingleTon
{
public static void main(String[] args)
{
SingleForALazyMan s1 = SingleForALazyMan.getInstance();
SingleForALazyMan s2 = SingleForALazyMan.getInstance();
SingleForAHungryMan s3 = SingleForAHungryMan.getInstance();
SingleForAHungryMan s4 = SingleForAHungryMan.getInstance();
System.out.println("Single For A Lazy Man:");
System.out.println("s1 == s2?"+(s1.equals(s2)));
System.out.println("s1 = "+s1);
System.out.println("s2 = "+s2);
System.out.println("Single For A Hungry Man:");
System.out.println("s3 == s4?"+(s3.equals(s4)));
System.out.println("s3 = "+s3);
System.out.println("s4 = "+s4);
}
}
复制代码
作者:
MUFCRyanCR7
时间:
2015-9-5 16:01
顶一个~~~~~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2