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


    一个正常的饿汉单例模式

     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 }

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

  • 相关阅读:
    ubuntu 14.04 LTS 163更新源
    Windows 2008R2 修改SID
    ubuntu14 使用rsync远程备份文件
    vim常用
    Ubuntu创建lvm
    Windows 迁移本地用户配置文件到域用户
    Linux scp使用
    Centos 7 修改网卡名称、静态IP
    Axel多线程工具安装
    testlink 1.9.19安装
  • 原文地址:https://www.cnblogs.com/vijozsoft/p/5524978.html
Copyright © 2020-2023  润新知