黑马程序员技术交流社区
标题:
单例设计模式之懒汉模式
[打印本页]
作者:
文盲庄稼汉
时间:
2014-8-30 11:36
标题:
单例设计模式之懒汉模式
单例设计模式:解决一个类在内存只存在一个对象。
想要保证对象唯一,怎么办?
1、为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象。
2、还为了让其他程序可以访问到该类对象,只好在本类中自定义一个对象。
3、为了让其他程序对自定义的访问,可以对外提供一些访问方式。
这三步怎么使用代码体现呢?
1、创建私有静态构造函数(用private修饰)。
private修饰:一般类变量应该私有化,只能通过成员方法来访问。
2、创建私有静态对象(用private和statis修饰)。
statis修饰:静态方法访问类中的成员,成员也必须是静态的。
private修饰:禁止其他类创建本类对象。
3、创建共有静态方法获取私有对象(用public和statis修饰)。
public修饰:公开一个获取该类对象的方法。
static修饰: 调用方法可通过类名调用和对象调用,但没有对象,只能通过类名,所以该方法必须是静态的。
不设置set方法,是因为该类只有一个对象,不需要设置。
class Single{
private Single(){}
private static Single s = new Single();
public static Single getInstance(){
return s;
}
}
class SingleDemo{
public static void main(String[] args){
Single ss = Single.getInstance();
}
}
复制代码
那么单例设计怎么使用?
对于事物该怎么描述,就怎么描述。
当需要该事物的对象保证在内存中唯一时,就将以上的三步加上即可。
这种方式也称为饿汉式
class Single{
//私有成员变量
private int num;
//对外公开设置方法
public void setNum(int num){
this.num = num;
}
//对外公开获取方法
public int getNum(){
return num;
}
//私有构造函数,阻止本类以外的类使用
private Single(){}
//创建本类对象
//被静态方法访问,就要被 static 修饰
//s是成员变量,要用 private 修饰
private static Single s = new Single();
//提供共有方法访问本类私有静态对象
//返回值为类类型
public static Single getInstance(){
//访问本类对象,静态方法只能访问静态对象
return s;
}
}
class SingleDemo{
public static void main(String[] arge){
Single s1 = Single.getInstance();
Single s2 = Single.getInstance();
//s1和s2都是同一个对象
System.out.println(s1==s2);
//设置s1的值,s2的值也跟着改变,因为他们都是同一对象。
s1.setNum(25);
System.out.println(s1.getNum());//25
System.out.println(s2.getNum());//25
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2