黑马程序员技术交流社区

标题: 单例设计模式 [打印本页]

作者: 陈云阳    时间: 2014-5-29 06:18
标题: 单例设计模式
本帖最后由 陈云阳 于 2014-5-29 06:58 编辑
  1. class SingleDemo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.               
  6.                  Student s1 = Student.getstudent();
  7.                  Student s2 = Student.getstudent();
  8.                  s1.setAge(30);
  9.                  s2.setAge(20);
  10.                  System.out.println(s1.getAge());
  11.         }

  12.         

  13. }

  14. class Student
  15. {
  16.         private int age;
  17.         private Student(){}
  18.         private static Student s = new Student();
  19.         /*
  20.                 private static Student s = new Student()
  21.                 这句话有个小疑问, 为什么不直接将它修饰为public
  22.                 然后直接调用s对象,也能起到对象只能建立一个的效果
  23.                 为什么还要弄getstudent()方法间接调用,
  24.                 难道有什么隐患吗
  25.         */
  26.         
  27.         public static Student getstudent()
  28.         {
  29.                 return s;
  30.         }
  31.         
  32.         public void setAge(int age)
  33.         {
  34.                 this.age = age;
  35.         }
  36.         public int getAge()
  37.         {
  38.                 return age;
  39.         }
  40. }
复制代码
       单例设计模式:解决一个类在内存只存在一个对象。


        想要保证对象唯一。
        1.为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象
        2.还为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象。
        3.为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。

        这三步怎么用代码体现呢?
        1.将构造函数私有化。
        2.在类中创建一个本类对象。
        3.提供一个方法可以获取到该类。

        对于事物该怎么描述,还怎么描述。
        当需要将该事物的对象保证在内存中唯一时,就将以上的三步加上即可。

作者: 菠萝包丶    时间: 2014-5-29 12:53
本帖最后由 菠萝包丶 于 2014-5-29 12:56 编辑

单例设计模式,要保证代码的封装性
对象的建立,过程你不需要管,我们只要最后提供一个方法给你得到那个对象就行了。所以对象要私有化,不能让别人对其进行操作,如果你过多暴露太多的东西,就不安全了。
如果你光是将对象私有化,而不提供方法获取的话,就无法得到对象,这样就没法操作一些非静态的内容了
这就是我们为什么要将建立对象私有化,然后将对象封装起来,只提供方法让你得到那个对象的原因。


作者: 远行的人2号    时间: 2014-5-29 22:36
赞赞赞赞!!!!
作者: 七弦    时间: 2014-5-31 13:04
要是写成public static 直接就类名调用了,ok? 那还要getstudent() 吗?
作者: 七弦    时间: 2014-6-1 10:34
七弦 发表于 2014-5-31 13:04
要是写成public static 直接就类名调用了,ok? 那还要getstudent() 吗?

是的,单例设计模式讲求的就是通过提供的方法获取到本类对象,然后去用,你直接通过类名调用了哪还有封装性可言?
作者: zhang63    时间: 2014-6-1 10:36
我正要看这个,
作者: 小小菜鸟101    时间: 2014-6-15 07:03
延迟单例模式怎么写呢?




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