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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 我干阿衰 中级黑马   /  2015-5-11 23:07  /  1204 人查看  /  20 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

什么是单例设计模式?

20 个回复

倒序浏览
内存中只存在一个对象。
回复 使用道具 举报
这个我们貌似还没学到。。。。
回复 使用道具 举报
单例设计模式,就是为了保证系统中只存在一个该类的实例对象
回复 使用道具 举报
本帖最后由 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. }
复制代码




回复 使用道具 举报
qian0217wei 发表于 2015-5-12 00:43
毕老师视频里详细讲解了单例设计模型,单力设计模式:解决一个类中在内存中只存在一个对象
想要保证对象唯 ...

在函数上加锁是什么情况啊?
回复 使用道具 举报
qian0217wei 来自手机 高级黑马 2015-5-12 10:32:18
7#
懒汉式如果不加锁,就会出现我在代码中写到的,AB出现两个对象,这与要求不和,所以可以考虑在函数上加锁,可是在加锁会降低效率!所以可以判断下!
回复 使用道具 举报
加锁是因为线程不安全。。
回复 使用道具 举报
想要那片海 发表于 2015-5-12 08:18
在函数上加锁是什么情况啊?

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

确保某段代码块在锁内的执行完整性,可以避免产生多线程的安全问题
回复 使用道具 举报
廖直赟 发表于 2015-5-12 10:45
加锁是因为线程不安全。。

是,赞一个
回复 使用道具 举报
对一个类只能由一个对象能够访问,实现方式是私有化对象,创建一个取得该对象的方法,接着谁要用就谁调用该方法。
回复 使用道具 举报
单例模式,又称单件模式或者单子模式,指的是一个类只有一个实例,并且提供一个全局访问点。
回复 使用道具 举报
单例 自我理解就是只有一个对象,大家一起用这个对象,一个人对这个对熊做出了变动,其他人使用时 是使用变化后的对象
回复 使用道具 举报
单例就是一个类只会产生一个对象,单例设计模式又分为懒汉式和饿汉式,只是创建的对象的时间不一样而已
回复 使用道具 举报
只有一个实例对象
回复 使用道具 举报
简单来说就是你定义的方法有一些不必要的公开的方法需要隐藏不要外部访问这样就需要一个程序设计模式去设计一个共有的访问方法,然后想公开的对象可以通过调用之前公开的方法进行调用
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马