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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

:Q

求指导·····

保证一个类在使用过程中,只有一个实例 。 到底啥意思这句话

点评

如果你的问题已经得到解决,请及时将主题改为[已解决],如果还有问题请继续追问,谢谢!  发表于 2013-3-28 08:32

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

8 个回复

倒序浏览
就是为了让一个类只能创建一个对象,不让它创建多个对象。

这是一个设计模式,也是一种思想,在我们生活中很常见。

比如:一个人只能有一个脑袋。你在创建一个人对象的时候你不能new两个脑袋对象吧。

这个时候你就可以用单例来保证内存中只有一个对象。

也表是你每次要去操作的也只能是这一个对象了。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
保证只有一个实例 单例模式适合于一个类只有一个实例的情况,比如窗口管理器,打印缓冲池和文件系统,它们都是原型的例子。典型的情况是,那些对象的类型被遍及一个软件系统的不同对象访问,因此需要一个全局的访问指针
回复 使用道具 举报
一一一、、、、单例模式的介绍单例模式的介绍单例模式的介绍单例模式的介绍    Singleton是一种创建型模式,指某个类采用Singleton模式,则在这个类被创建后,只可能产生一个实例供外部访问,并且提供一个全局的访问点。     全局对象和Singleton模式有本质的区别,因为大量使用全局对象会使得程序质量降低,而且有些编程语言根本不支持全局变量。最重要的是传统的全局对象并不能阻止一个类被实例化多次。  二二二二、、、、单例模式单例模式单例模式单例模式的的的的特点特点特点特点     单例类只能有一个实例  单例类必须自己创建自己的唯一实例。  单例类必须给所有其他对象提供这一实例。  三三三三、、、、单例模式的应用单例模式的应用单例模式的应用单例模式的应用     每台计算机可以由若干个打印机,但只能有一个Printer Spooler,避免有两个作业同时输出到打印机。  一个具有自动编号主键的表可以有多个用户同时使用,但数据库中只能有一个地方分配下一个主键。否则会出现主键重复

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
java中单例模式是一种常见的设计模式,懒汉式单例、饿汉式单例
  单例模式有一下特点:
  1、单例类只能有一个实例。
  2、单例类必须自己自己创建自己的唯一实例。
  3、单例类必须给所有其他对象提供这一实例。

  单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。总之,选择单例模式就是为了避免不一致状态,避免多出头。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
strawberry2013 发表于 2013-3-27 21:46
java中单例模式是一种常见的设计模式,懒汉式单例、饿汉式单例
  单例模式有一下特点:
  1、单例类只 ...

:D 又看了看视频 似懂非懂
回复 使用道具 举报
胡军 中级黑马 2013-3-27 22:19:37
7#
  1. class Single
  2. {
  3.         private  Single(){}//将构造函数私有化。

  4.         private static Single s = new Single();//在类中创建一个本类对象。

  5.         public static  Single getInstance()//提供一个方法可以获取到该对象。
  6.         {
  7.                 return s;
  8.         }
  9. }
复制代码
就是让这个类在内存中只存在一个对象,保证这个对象的唯一性。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
//单列设计模式其实就是为了解决一个类在内存中只存在一个对象所总结出来的一个套路。

//Man这个类没有采用单列设计模式
class Man{
        Man(){}
}
//Women这个类采用了单例设计模式
class Women{
        private Women(){}   //私有构造函数可以禁止别人new这个类的对象
        private static final Women w = new Women(); //自己建一个对象供别人使用,当然也必须私有,否则别人可以通过Women.w的方式直接调用。
        public static Women getInstance(){        //提供一个方法让别人可以创建该类对象。
                return w;
        }
}
class SingleDemo{
        public static void main(String[] args){
                //创建Man的两个对象进行比较
                Man m1 = new Man();
                Man m2 = new Man();
                System.out.println(m1.equals(m2)); //输出 false 说明m1和m2是两个对象
                //创建Women的两个对象进行比较
                Women w1 = Women.getInstance();
                Women w2 = Women.getInstance();
                System.out.println(w1.equals(w2)); //输出 true 说明w1和w2是同一个对象
        }
}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
聂斌 中级黑马 2013-3-28 00:42:35
9#
单例设计模式:解决一个类在内存中只存在一个对象。

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

这三部怎么用代码体现呢?
1,将构造函数私有化。这个函数里面可以写东西,本类可以使用
2,在类中创建一个本类对象。
3,提供一个方法可以获取到该对象。要想返回这个对象,这个方法的返回值类型是类类型


        private static Single s = new Single();
        private Single(){}
        public static Single getInstance()         //通过这方法才能拿到这对象,不能再new对象了,用静态修饰,方法被调用只有2种方式可以用,一个是对象一个是类名,,,现在是没有对象调用那个                           
                                                                 方法了因为其他人不能new对象了所以用类名调用,能用类名调用,这方法必须要静态,静态方法是得访问类中成员,所以Single s 也是静态,s是成员                           
                                                                  变量,类中变量,一般定义变量都私有化所以Single s 也是私有,通过方法来访问它,只有get方法不要set方法,因为只有一个对象不需要再设置了
        {
                return s;
        }


应用:
单例模式也是一种比较常见的设计模式,它到底能带给我们什么好处呢?其实无非是三个方面的作用:

第一、控制资源的使用,通过线程同步来控制资源的并发访问;

第二、控制实例产生的数量,达到节约资源的目的。

第三、作为通信媒介使用,也就是数据共享,它可以在不建立直接关联的条件下,让多个不相关的两个线程或者进程之间实现通信。

比如,数据库连接池的设计一般采用单例模式,数据库连接是一种数据库资源,,


还有计数器的应用:

我们在浏览BBS、SNS网站的时候,常常会看到“当前在线人数”这样的一项内容。对于这样的一项功能,我们通常的做法是把当前的在线人数存放到一个内存、文件或者数据库中,每次用户登录的时候,就会马上从内存、文件或者数据库中取出,在其基础上加1后,作为当前的在线人数进行显示,然后再把它保存回内存、文件或者数据库里,这样后续登录的用户看到的就是更新后的当前在线人数;同样的道理,当用户退出后,当前在线人数进行减1的工作。所以,对于这样的一个需求,我们按照面向对象的设计思想,可以把它抽象为“在线计数器”这样一个对象,,

网站代码中凡是用到计数器的地方,只要new一个计数器对象,然后就可以获取、保存、增加或者减少在线人数的数量。不过,我们的代码实际的使用效果并不好。假如有多个用户同时登录,那么在这个时刻,通过计数器取到的在线人数是相同的,于是他们使用各自的计数器加1后存入文件或者数据库。这样操作后续登陆的用户得到的在线人数,与实际的在线人数并不一致。所以,把这个计数器设计为一个全局对象,所有人都共用同一份数据,就可以避免类似的问题,这就是我们所说的单例模式的其中的一种应用。


回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马