黑马程序员技术交流社区

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

作者: 北冥有鱼    时间: 2014-3-7 03:14
标题: 关于单例设计模式
都说单例设计模式除非使用暴力映射否则只能建立一个对象。于是胡乱改改,请问一下给单例设计模式添加了构造参数,是不是就不算是单例设计模式了
  1. class  Single
  2. {
  3.         int num;
  4.         private static Single s=null;
  5.         private Single(int num){
  6.                 this.num=num;
  7.         }
  8.         public static Single getInstance(int num)
  9.         {
  10.                 //while(s==null)
  11.                 //{
  12.                         //synchronized(Single.class)//单例设计模式———懒汉式加锁
  13.                         //{
  14.                                 s=new Single(num);
  15.                         //}
  16.                 //}
  17.                
  18.                 return s;
  19.         }
  20.        
  21. }
  22. class SingleDemo
  23. {
  24.         public static void main(String[] args)
  25.         {
  26.                 Single s1=Single.getInstance(1);
  27.                 Single s2=Single.getInstance(2);
  28.                 System.out.println("s1="+s1.num);
  29.                 System.out.println("s2="+s2.num);
  30.                 System.out.println("s1="+s1.num);
  31.         }
  32. }
复制代码




作者: 王松松    时间: 2014-3-7 14:00
  1. class  Single
  2. {
  3.         int num;
  4.         private static Single s = null;
  5.         private Single(int num){
  6.                 this.num = num;
  7.         }
  8.         public static Single getInstance(int num)
  9.         {
  10.             while(s==null){//这行代码必须要加上才能实现单例
  11.                 s=new Single(num);
  12.               }
  13.             return s;
  14.         }
  15. }
  16. public class SingleDemo
  17. {
  18.         public static void main(String[] args)
  19.         {
  20.                 Single s1=Single.getInstance(1);
  21.                 Single s2=Single.getInstance(2);
  22.                                 System.out.println(s1==s2);//true,说明是同一个对象,还是单例设计模式
  23.                                 System.out.println("s1="+s1.num);//1
  24.                 System.out.println("s2="+s2.num);//1
  25.                 System.out.println("s1="+s1.num);//1
  26.         }
  27. }
复制代码

作者: 混蛋哥    时间: 2014-3-7 14:17
王松松 发表于 2014-3-7 14:00

不加上也能实现单例,看毕老师的视频单例有两种方式,你说的这个是懒汉式单例,其实单例模式分为三种:懒汉式单例、饿汉式单例、登记式单例三种。你添加构造函数还是单例设计模式。  单例模式有一下特点:
  1、单例类只能有一个实例。
  2、单例类必须自己自己创建自己的唯一实例。
  3、单例类必须给所有其他对象提供这一实例。

单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。




作者: 杯之水    时间: 2014-3-7 14:44
还是单例设计模式,因为不管是通过懒汉式还是饿汉式,当在main函数中调用getInstance(int num)时,内存中始终都只有一个对象,建立s1,s2只不过增加了指向该对象的引用,若是带参构造函数,则参数就是首次建立对象的参数,不会改变,要想改变,可以通过get和set方法实现。
作者: 1844611785    时间: 2014-3-7 14:49
怎么叫给单例模式添加构造函数就不是单例了?单例模式的构造函数只是private 的而已,不容许外界new对象,但是提供创建实例方法




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