黑马程序员技术交流社区

标题: 单例模式 [打印本页]

作者: zlb820    时间: 2016-6-10 14:14
标题: 单例模式
单例模式
单例模式:一个类只可以有一个产生一个对象。
    实现:把构造函数设置为private就可以禁止外部创建对象了。
定义:
        确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
优缺点:
          优点:1·因为单例模式 在内存中只有一个实例,所以减少了内存的开支,特别是一个对象需要频繁的创建、销毁时、并且创建和销毁时性能又无法优化,这时单例模式的优点就很明显。
                    2·单例模式只生成一个实例,减少了系统的性能开销,当一个对象需要比较多的资源的时候,可以在应用启动时,直接产生一个单例对象,永久的驻存在内存中。(javaEE需要注意单例模式的垃圾回收)
                    3·单例模式可以避免对资源的重复占用。
                     4·单例模式可以设置全局的访问点。
        缺点:1·单例模式一般没有借口,因此扩展很困难、。
                    2·单例模式对测试不利。在并行开发中,如果单例没有完成,其他的活动也不能进行,因为没有借口,所以mock也无法虚拟一个对象。
                    3.单例模式与单一职责原则冲突。
单例模式的应用场景:
                    1、要求生成唯一的序列号。
                    2、在整个项目中需要一个共享访问点或者共享数据
                    3、创建一个对象需要消耗过多的资源,比如IO和数据库资源
                    4、需要定义大量的静态常量和静态方法。
注意:单例模式需要注意线程同步的问题,当高并发时,会有线程不安全的情况;解决办法是可以使用synchronized。
对于单例模式的实现一般有两种办法:饿汉式和 懒汉式
饿汉式:指的是一上来就创建一个实例,等不及了。
public class singleton {
        private static final singleton singleton=new songleton();
        private singleton(){}
public staic singleton getinstance(){
        return singleton;
    }

}
懒汉式:先不急着创建对象,什么时候需要了再说
public class singleton {
        private static final singleton singleton=null;
        private singleton(){}
public staic singleton getinstance(){
        synchronized{
            if(singleton==null)
{           singleton =new singleton();}
}
        return singleton;
    }

}





单例模式的扩展:上限的单例模式 :产生固定数量的对象的模式



作者: dubei1993    时间: 2016-6-10 17:28
嗯。保证类的对象在内存中是唯一的:Runtime就是采用了单例模式。




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