黑马程序员技术交流社区

标题: 什么是单例设计模式? [打印本页]

作者: 我干阿衰    时间: 2015-5-11 23:07
标题: 什么是单例设计模式?
什么是单例设计模式?
作者: Ray丶少年    时间: 2015-5-11 23:13
内存中只存在一个对象。
作者: 0416_张威    时间: 2015-5-12 00:21
这个我们貌似还没学到。。。。
作者: c523106    时间: 2015-5-12 00:42
单例设计模式,就是为了保证系统中只存在一个该类的实例对象
作者: qian0217wei    时间: 2015-5-12 00:43
本帖最后由 qian0217wei 于 2015-5-12 00:44 编辑

毕老师视频里详细讲解了单例设计模型,单力设计模式:解决一个类中在内存中只存在一个对象
想要保证对象唯一
1.为了避免其他程序过多建立该类对象,先控制禁止其他程序建立该类对象
2.还为了让其他程序可以访问到该类对象,只好在本类中自定义一个对象
3.为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式
这三部如何用代码体现
1.将构造函数私有化
2.在类中创建一个本类对象
3.提供一个方法可以获取到该对象饿汉式如下:
  1. class Single
  2. {       
  3.         private int num;
  4.         private single(){}
  5.         private static single s = new Single();//s应该也是静态的,而且应该被私有化
  6.         public void setNum(num)
  7.         {
  8.            this.num = num;       
  9.         }
  10.         public int getNum()
  11.         {
  12.                 return num;
  13.         }
  14.         public static single getInstance()
  15.         {
  16.                 return s;
  17.         }//方法只用通过类名访问所以是static修饰


  18. }
  19. class SingleDemo
  20. {
  21.         public static void main(String args[])
  22.      {
  23.                 Single ss = Single.getInstance();
  24.                 Single s1 = Single.getInstance();
  25.                 s1.setNum(22);
  26.            System.out.println(ss.getNum());//打印结果是22这就证明是一个对象;如果是0那就是两个对象
  27.         }
  28. }
复制代码


懒汉式如下:
  1. class Single
  2. {
  3.         private static Single s = null;
  4.         private Single(){}
  5.         public static   Single getInstance()//synchronized加锁   锁不读就会提高效率
  6.         {
  7.         if(s == null)
  8.         {
  9.         sychronized(single.class)
  10.         {
  11.          if(s==null)
  12.                 //--A执行到这停止了
  13.                 //--B执行到这也停了
  14.            s = new Single();//A执行之后 B也执行了
  15.         }
  16.       }
  17.         return s;
  18.         }        

  19. }
复制代码





作者: 想要那片海    时间: 2015-5-12 08:18
qian0217wei 发表于 2015-5-12 00:43
毕老师视频里详细讲解了单例设计模型,单力设计模式:解决一个类中在内存中只存在一个对象
想要保证对象唯 ...

在函数上加锁是什么情况啊?
作者: qian0217wei    时间: 2015-5-12 10:32
懒汉式如果不加锁,就会出现我在代码中写到的,AB出现两个对象,这与要求不和,所以可以考虑在函数上加锁,可是在加锁会降低效率!所以可以判断下!
作者: 廖直赟    时间: 2015-5-12 10:45
加锁是因为线程不安全。。
作者: cjmjava    时间: 2015-5-12 11:47
想要那片海 发表于 2015-5-12 08:18
在函数上加锁是什么情况啊?

锁是多线程里同步的内容吧
作者: yas丶    时间: 2015-5-12 11:56
单例设计模式:
  保证一个类仅有一个实例(只能new一个对象),并提供一个访问它的全局访问点
1、声明一个本类对象
2、构造方法私有化
3、给外部提供一个静态方法获取对象实例
两种实现方式:
1、饿汉式
2、懒汉式(会有线程安全问题)
作者: guoqiangmailbox    时间: 2015-5-12 17:38
整个工程,一个类 只创建一个,就像世界是一个类,一个对象,世界只有一个你,这就是单例设计模式,独一无二
作者: !85684009ex    时间: 2015-5-14 09:06
只能创建一个对象!我就知道这么多!
作者: Tauruszzy    时间: 2015-5-14 09:48
想要那片海 发表于 2015-5-12 08:18
在函数上加锁是什么情况啊?

确保某段代码块在锁内的执行完整性,可以避免产生多线程的安全问题
作者: Tauruszzy    时间: 2015-5-14 09:51
廖直赟 发表于 2015-5-12 10:45
加锁是因为线程不安全。。

是,赞一个
作者: hzhzhen    时间: 2015-5-14 10:39
对一个类只能由一个对象能够访问,实现方式是私有化对象,创建一个取得该对象的方法,接着谁要用就谁调用该方法。
作者: sxsxsx    时间: 2015-5-14 12:39
单例模式,又称单件模式或者单子模式,指的是一个类只有一个实例,并且提供一个全局访问点。
作者: xgd6612    时间: 2015-5-14 12:43
单例 自我理解就是只有一个对象,大家一起用这个对象,一个人对这个对熊做出了变动,其他人使用时 是使用变化后的对象
作者: 齐弦    时间: 2015-5-14 13:53
单例就是一个类只会产生一个对象,单例设计模式又分为懒汉式和饿汉式,只是创建的对象的时间不一样而已
作者: ytooo00    时间: 2015-5-14 17:36
只有一个实例对象
作者: xicheng26    时间: 2015-5-14 18:07
简单来说就是你定义的方法有一些不必要的公开的方法需要隐藏不要外部访问这样就需要一个程序设计模式去设计一个共有的访问方法,然后想公开的对象可以通过调用之前公开的方法进行调用
作者: zhangjnia    时间: 2015-5-14 18:35
分为懒汉式和饿汉式,视频中讲过的啊,多看看及明白了




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