您的位置:首页 > 其它

单例设计模式讲解

2015-09-12 11:09 281 查看

单例设计模式

确保在内存中只有一个对象,该实例必须自动创建,并对外提供

分类:

饿汉式

懒汉式

饿汉式:

类加载的时候创建对象

懒汉式

要用的时候创建对象

/**
*饿汉式:
*单例是在内存中只有一个对象
*所以是不允许外界创建对象的,所以构造方法是私有的,
*因为外界不能创建对象,所以。我只能在在对象里面创建对象,在通过方法来调用这个对象,因为外界不能创建对象,
*所以,只能通过类名来调用这个对象,所以这个方法是静态的。因为返回值是静态的,所以,创建的对象也应该是静态的,
*因为不允许外界直接修改这个对象的值,所有,这个对象必须私有化,
*饿汉式创建对象结束
*/
public class StudentDemo {
public static void main(String args[]){
//	调用方法创建两个对象
Student s1 = Student.getStudent();
Student s2 = Student.getStudent();
//	比较两个对象的值
System.out.println(s1==s2);
}
}
class Student {
//	 构造方法私有,不允许外界创建对象、
private Student(){
}
//	对象私有,不允许外界改变,同时静态,表示值创建一次、
private static Student s = new Student();
//	创建方法,是外界直接调用,静态表示这个通过类名调用
public static Student getStudent(){
//		返回这个对象
return s;
}
}


/**
*懒汉式:
*不管是饿汉式,还是懒汉式,构造方法都需要私有,因为都是不允许外界创建对象的,所有首先是构造方法私有化
*第二是,根据懒汉式的原则的,是要用对象的时候才创建对象的,所有,这个比就需要在创建方法的时候创建对象,但是,
*这个对象是需要下次调用的,不然每一次调用这个方法的时候,都会创建一个对象,所以,我们需要把这个对象定义在方法外面
*同时赋值为null,同时定义为静态,在类的加载时创建对象,然后需要我们需要判读这个对象,是不是等于null如果是等于,
*代表这个对象没有被创建,我们需要创建对象,如果不是null,则直接返回这个对象就可以。
*/
public class TeacherDemo {
public static void main(String[] args){
//	创建两个对象
Teacher t1 = Teacher.getTeacher();
Teacher t2 = Teacher.getTeacher();
//	判断对象是否相等
System.out.println(t1==t2);
}
}

public class Teacher {
//	构造方法私有、
private Teacher(){
}
//	定义对象为null
static Teacher t = null;
//	外界调用这个方法,创建对象
public static Teacher getTeacher(){
//		判断这个对象是不是为空,如果为空,创建对象
if(t == null){
t = new Teacher();
}
//		否则,直接返回
return t;
}
}


总结:

单例,就是在内存中只有一个内存地址,外界不能创建对象,所有对象只能通过方法创建,这样,才能保证这个对象的地址唯一,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: