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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zlb820 中级黑马   /  2016-6-10 14:14  /  844 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

单例模式
单例模式:一个类只可以有一个产生一个对象。
    实现:把构造函数设置为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;
    }

}





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


1 个回复

倒序浏览
嗯。保证类的对象在内存中是唯一的:Runtime就是采用了单例模式。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马