两种项目中可用的单例模式

一个正常的饿汉单例模式

 1 //CEO,饿汉单例模式
 2 
 3 public class CEO extends Staff{
 4 
 5 private static final CEO mCeo = new CEO();
 6 
 7 //构造函数私有
 8 
 9 private CEO(){
10 
11 }
12 
13 //公有的静态函数,对外暴露获取单例对象的接口
14 
15 public static CEO getCeo(){
16 
17 return mCeo;
18 
19 }
20 
21 @Override
22 
23 public void work(){
24 
25 //管理VP
26 
27 }
28 
29 }

这种最简单的单例模式存在资源消耗、线程安全等问题,所以正常开发过程中并不推荐使用这种单例模式。

常见的单例模式还有DCL方式的单例模式、静态内部类单例模式,但这些都会出现反序列化时重新创建对象的问题。

以上单列模式避免对象在被反序列化时重新生成对象,那么必须加入这个方法:

1 private Object readResolve() throws ObjectSteamException{
2 
3 return sInstance;
4 
5 }

下面介绍两种Android项目中常用的单例模式的实现:

 

枚举单例

 1 public enum SingletonEnum{
 2 
 3   INSTANCE;
 4 
 5   public void doSomething(){
 6 
 7     System.out.println("do.sth.");
 8 
 9   }
10 
11 }

 

使用容器实现单例模式

 1 public class SingletonManager{
 2 
 3 private static Map<String,Object> objMap = new HashMap<String,Object>();
 4 
 5 private SingletonManager(){
 6 
 7 }
 8 public static void registerService(String key,Object instance){
 9 if(!objMap.containsKey(key)){
10 objMap.put(key,instance);
11 }
12 }
13 public static Object getService(String key){
14 return objMap.get(key);
15 }
16 }

单例模式的核心原理都是将构造函数私有化,并且通过静态方法获取一个唯一的实例。

posted @ 2016-05-24 21:47  栗子·无限意志  阅读(1027)  评论(0编辑  收藏  举报