1.单例设计模式

1.两种单例

a.饿汉单例,代码如下:

public class Emperor {  

  private static final Emperor emperor =new Emperor();  //初始化一个皇帝    (饿汉) 

  private Emperor()

{             //世俗和道德约束你,目的就是不希望产生第二个皇帝     }    

public static Emperor getInstance()

{             return emperor;     }     //皇帝发话了    

public static void say()

{             System.out.println("我就是皇帝某某某....");     }

 

//类中其他方法,尽量是static

  public static void doSomething(){
}

}

 

b.懒汉单例模式,代码如下:

public class Singleton

{ private static Singleton singleton = null; //限制产生多个对象

 private Singleton(){ } //通过该方法获得实例对象

 public static synchronized Singleton getSingleton()  // synchronized是为了解决线程安全问题

{

 if(singleton == null){ singleton = new Singleton(); }

return singleton;

}

}

2.优点:

 2.1 由于单例模式在内存中只有一个实例,减少了内存开支

 2.2 由于单例模式只生成一个实例,所以减少了系统的性能开销

 2.3 单例模式可以避免对资源的多重占用,例如一个写文件动作,由于只有一个实例存在

内存中,避免对同一个资源文件的同时写操作

 2.4单例模式可以在系统设置全局的访问点,优化和共享资源访问,例如可以设计一个单

例类,负责所有数据表的映射处理。

3.缺点

3.1 单例模式没有接口,所以扩展很困难

3.2 单例模式违背了单一职责原则(一个类应该只实现一个逻辑)

3.3  单例模式对测试不利 ,在并行开发环境中,如果单例模式没有完成,是不能进行 测试的

补充:在Spring中,每个Bean默 认就是单例的,这样做的优点是Spring容器可以管理这些Bean的生命期,决定什么时候创建 出来,什么时候销毁,销毁的时候要如何处理,等等。如果采用非单例模式(Prototype类 型),则Bean初始化后的管理交由J2EE容器,Spring容器不再跟踪管理Bean的生命周期。

 

posted @ 2019-02-18 21:57  成武  阅读(122)  评论(0编辑  收藏  举报