A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈云阳 高级黑马   /  2014-5-29 06:18  /  1760 人查看  /  8 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陈云阳 于 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.提供一个方法可以获取到该类。

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

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1 赞一个!

查看全部评分

8 个回复

倒序浏览
本帖最后由 菠萝包丶 于 2014-5-29 12:56 编辑

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

点评

OK 谢谢啊  发表于 2014-5-29 15:58

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

回复 使用道具 举报
赞赞赞赞!!!!
回复 使用道具 举报
要是写成public static 直接就类名调用了,ok? 那还要getstudent() 吗?

点评

重点是类封装性  发表于 2014-5-31 19:36
回复 使用道具 举报
七弦 发表于 2014-5-31 13:04
要是写成public static 直接就类名调用了,ok? 那还要getstudent() 吗?

是的,单例设计模式讲求的就是通过提供的方法获取到本类对象,然后去用,你直接通过类名调用了哪还有封装性可言?
回复 使用道具 举报
我正要看这个,
回复 使用道具 举报
延迟单例模式怎么写呢?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马