黑马程序员技术交流社区

标题: 有没大神详细讲一下什么是单例设计模式? [打印本页]

作者: 樊其杰    时间: 2013-1-9 08:51
标题: 有没大神详细讲一下什么是单例设计模式?
本帖最后由 樊其杰 于 2013-1-15 19:03 编辑

有没大神详细讲一下什么是单例设计模式?视频上讲的没听太明白
作者: 李培根    时间: 2013-1-9 09:01
简单说就是私有构造函数,自己创建一个对象,并对外提供获取对象的共有方法,达到只能创建一个对象的目的
作者: 徐帅    时间: 2013-1-9 09:04
本帖最后由 徐帅 于 2013-1-9 09:05 编辑

单例设计模式:
就是保证一个类在内存只存在一个对象,别人无法创建多余的该类对象,每次“创建”
该类对象的时候,获得的都是那内存中的唯一一个即同一个对象

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

这三部的代码体现
   1> 将构造函数私有化。
   2> 在类中创建一个本类对象。
   3> 提供一个方法可以取到该对象。

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

下面附上饿汉式的代码,运行后,观察结果,希望对楼主有帮助
  1. class Single {

  2.         private int num;
  3.         private Single() {}
  4.         private static Single s = new Single();

  5.         public static Single getInstance() {
  6.                 return s;
  7.         }

  8.         public void setNum(int num) {

  9.                 this.num = num;
  10.         }

  11.         public int getNum() {
  12.                 return num;
  13.         }

  14. }
  15. //单例:唯一的学生对象
  16. class Student {
  17.         private int age;
  18.         private static Student s = new Student();

  19.         private Student() {
  20.         }

  21.         public static Student getStudent() {
  22.                 return s;
  23.         }

  24.         public void setAge(int age) {
  25.                 this.age = age;
  26.         }

  27.         public int getAge() {
  28.                 return age;
  29.         }
  30. }


  31. class SingleDemo {
  32.         public static void main(String[] args) {
  33.                 Single s1 = Single.getInstance();
  34.                 Single s2 = Single.getInstance();

  35.                  s1.setNum(23);
  36.                  System.out.println("s1 的 年龄:"+s1.getNum()+"= s2的年龄:"+s2.getNum());
  37.                  System.out.println("s1 与 s2 所取得的是同一个对象!");
  38.                 Student stu1 = Student.getStudent();

  39.                 stu1.setAge(21);
  40.                 Student stu2 = Student.getStudent();
  41.                 System.out.println("stu1 的 年龄:"+stu1.getAge()+"= stu2的年龄:"+stu2.getAge());
  42.                 System.out.println("stu1 与 stu2 是同一个学生!");
  43.         }
  44. }
复制代码

作者: 焦健    时间: 2013-1-9 09:09
楼上的哥们说的很详细
作者: 樊其杰    时间: 2013-1-9 12:10
徐帅 发表于 2013-1-9 09:04
单例设计模式:
就是保证一个类在内存只存在一个对象,别人无法创建多余的该类对象,每次“创建”
该类对象 ...

谢谢,你的回答,对我帮助很大!
作者: 樊其杰    时间: 2013-1-9 12:11
李培根 发表于 2013-1-9 09:01
简单说就是私有构造函数,自己创建一个对象,并对外提供获取对象的共有方法,达到只能创建一个对象的目的 ...

谢谢,你现在已经在黑马了吗?
作者: 何竹冬    时间: 2013-1-9 13:38
你好
单例设计模式就是不能用new直接创建对象而是通过静态方法获取对象,
静态方法中获取对象时如果对象已经存在返回已经存在的对象。
保证了内存中运行的对象只有一个。
作者: 李培根    时间: 2013-1-9 15:02
樊其杰 发表于 2013-1-9 12:11
谢谢,你现在已经在黑马了吗?

没有呢,正在准备17期呢




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