单例模式

来源:互联网 发布:mega6.0软件下载 编辑:程序博客网 时间:2024/06/06 17:35
package DesignPatterns;/** * 优点: * 1:由于单例模式在内存中只有一个实例,减少了内存的开支,特别是一个对象需要频繁的创建、销毁 *    而且创建或者销毁时性能又无法优化,单例模式的优势就非常的明显 * 2:由于单例模式只能生成一个实例,所以减少了系统的性能开销,当一个对象的产生需要比较多的资 *    源时,如读取配置、产生其他依赖对象时,则可以通过在应用启动时直接产生一个单例对象,然后 *    永久驻留内存的方式来解决 * 3: 单例模式可以避免对资源的多重占用。(例如一个学文件动作,由于只要一个实例存在内存中,避 *    免对同一资源文件的同时写操作。) * 4:单利模式可以在系统设置全局的访问点,优化和共享资源访问。 *  * 缺点: * 1:单利一般没有接口,扩展很困难,若要扩展,除了修改代码基本上没有第二种途径可以实现, * 2:单例模式对测试很不利的。 * 3:单例模式与单一职责原则有冲突。 *  * *///单利模式通用代码(饿汉式单例) (不会出现产生多个实例的情况)public class SingletonPattern {private static final  SingletonPattern _single=new SingletonPattern();private SingletonPattern() {}public static SingletonPattern getInstance(){return _single;}public void DoSomething(){System.out.println("-----单利模式通用代码  .");}}//线程不安全的单利class SingletonPatternTwo{/** * 解决线程不安全的方法很多,可以在getInstance方法前加synchronized关键字,也可以在 * getInstance方法内增加synchronized来实现(增加synchronized的单例模式称为懒汉式单例),但都不是很优秀的单例模式。 * */private static SingletonPatternTwo _single=null;private SingletonPatternTwo(){}//public static synchronized SingletonPatternTwo  getInstance()  解决线程不安全public static SingletonPatternTwo  getInstance() {if(_single==null){_single=new SingletonPatternTwo();}return _single;}public void DoSomething(){System.out.println("-----线程不安全的单利  .");}}//静态内部类单例模式写法class SingletonPatternThree{private static class SingletonHolder{private static final SingletonPatternThree INSTANCE=new SingletonPatternThree();}private SingletonPatternThree(){}public static SingletonPatternThree getInstance() {return SingletonHolder.INSTANCE;}public void DoSomething(){System.out.println("-----静态内部类单例模式写法  .");}}

原创粉丝点击