黑马程序员技术交流社区

标题: 关于单例设计的疑问 [打印本页]

作者: 游兴钟    时间: 2012-4-9 13:56
标题: 关于单例设计的疑问
class Student
{
        private int age;


        private static Student s = new Student();//假如我在建立本类对象时不加private会有什么影响
        private Student(){}
        public static Student getStudent()
        {
                return s;
        }



        public void setAge(int age)
        {
                this.age = age;
               
        }
        public int getAge()
        {
                return age;
        }
}

作者: 翟友伟    时间: 2012-4-9 14:03
本帖最后由 翟友伟 于 2012-4-9 14:07 编辑

private的作用是  不让外界自由创立   Student 实例对象
通过方法访问唯一的s
同一时间只能 在内存中只能存在一个对象
不private的话,谁都来可创建了
作者: 黑马老兵    时间: 2012-4-9 14:08
private static Student s = new Student();//假如我在建立本类对象时不加private会有什么影响
如果没有私有,外部的类就可以调用随意的你这个对象。
作者: 王硕'    时间: 2012-4-9 14:12
  1. class test{
  2.                         public static void main(String[] args){
  3.                                 Student.s=null;
  4.                                 Student s1=Student.getStudent();
  5.                         }
  6.                 }
复制代码
s是Student类的静态成员,不私有当然可以直接调用,我直接把这个引用的值给改成null,你以后再调用getStudent方法,返回的s指向就是null了
作者: 任睦强    时间: 2012-4-9 14:42
single的特点是能够通过公用的方法有限制的获得本身类对象,如果改成public的其他类也可以随意获得该类对象,失去了single模型的特点
作者: 黑马-刘昌文    时间: 2012-4-9 14:45
如果不加private,别的类直接可以通过Student.s这种得属性的方式得到这个类的实例,并且还可以修改这个类的实例,这样在调用getStudent()时得到的实例就可能不是设计时的实例,这就违背了单例的实际思想!
作者: 郑涛    时间: 2012-4-9 17:27
单例设计模式:1,将构造函数私有化。2,用new在本类中创建一个本类对象3,对外提供一个方法返回该对象。这样做才能保证一个类在对象中的内存唯一性。如果不把将new实例私有化,一是单一静态变量在内存中生命周期较长,可以做到控制不创建对象,但内存开销大。私有化静态实例,可以实现内存中对象唯一,外部其他类不能够创建实例对象,实现数据的共享(一个对象)。
作者: 游兴钟    时间: 2012-4-11 02:09
谢谢大家 总算弄明白了
作者: pray    时间: 2014-4-26 08:07
我顶啊。接着顶




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2