单例设计模式讲解
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; } }
总结:
单例,就是在内存中只有一个内存地址,外界不能创建对象,所有对象只能通过方法创建,这样,才能保证这个对象的地址唯一,
相关文章推荐
- 接口和抽象类的区别---相信你看完不会再混淆了
- WWW-JSON
- Win10打不开chm文件的解决办法
- #1074 : 字体设计
- USACO 1.2 Name That Number (查字典)
- 把云装进“BOX”里
- 一个故事讲清楚 NIO
- hdu 1232 畅通工程
- 使用模板获取迭代器所指对象的类型
- 【CCF】网络延时
- javaScript资源
- 在ubuntu9.10下怎么安装Vmware Tools
- 勿忘“9·11”:BCM不能只做表面文章
- Spring数据格式化
- storcli中raid级别之间的转换
- java实体类生成工具
- 范围最大异或值
- 如何在Win10未激活用户添加桌面图标?Win10未激活用户添加桌面图标的方法
- poj2965解题报告
- Nginx性能优化