黑马程序员技术交流社区
标题: 单例模式(懒汉式和饿汉式) [打印本页]
作者: 孙万利 时间: 2012-11-29 00:48
标题: 单例模式(懒汉式和饿汉式)
方法被调用要么 对象调用(new),要么类名调用
要使用类调用:
那么被调用方法和成员都必须是静态的
通过方法访问成员,那么成员不对外公开,属性私有化
模式一:
/*
设计模式:解决某一类问题最行之有效的方法
java中23种设计模式之:
单例设计模式:解决一个类在内存中只存在一个对象
想要保证对象的唯一:
1.为了避免其他程序过多建立该对象,先进制其他程序建立该类对象
2.为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象
3.为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式
这三部怎么用代码体现?
1.将构造函数私有化
2.在类中创建一个本类对象
3.提供一个方法可以获取该对象
对于事物该怎么描述,还怎么描述
当需要将该事物的对象保证在内存中唯一时,就将以上的三步加上即可
*/
class Single
{
private int num;
public void setNum(int num)
{
this.num = num;
}
public int getNum()
{
return num;
}
private Single(){} //1.第一步
//Single(){}
private static Single s = new Single(); //类名调用要静态 //2.第二步
public static Single getInstance()//类名调用要静态//3.第三步
{
return s;
}
}
class SingleDemo
{
public static void main(String[] args)
{
//Single s = Single.getInstance();//类名调用
//Single s1 = new Single();
//Single s2 = new Single();
//s1.setNum(30);
//System.out.println(s2.getNum());//输出结果为0,因为new s1对象和new s2是不同对象
//下面通过单例模式调用,类调用指向了同一个对象;单例的好处
//Single s1 = Single.getInstance();
//Single s2 = Single.getInstance();
//s1.setNum(30);
//System.out.println(s2.getNum());
}
}
模式一总结:
先初始化对象,
称为:饿汉式: 最简单,开发使用
Single类一进内存,就已经创建对象,要给Single s初始化
模式二
//对象的方法调用时,才初始化。也叫对象的延迟加载;称为:懒汉式
//Single类进内存,对象还不存在,只有在调用getInstance方法时,才建立对象
class Single
{
private Single(){} //1.第一步
private static Single s = null; //类名调用要静态 //2.第二步
public static Single getInstance()//类名调用要静态//3.第三步
{
//外层if判断,是判断是否拿锁的过程,锁定程序synchronized(Single.class)
//内层判断,是判断后建立对象的过程
if(s==null)
{
synchronized(Single.class)
{
if(s==null)
s= new Single();
}
}
return s;
}
}
总结:
开发时定义单例,建议使用饿汉式
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |