通过retrofit学习使用容器列表实现单例模式

  1. 引语
    单例模式在Android的开发过程中很重要也是使用很方便的一种设计模式,使用场景通常是工具类或者对象创建销毁很消耗资源的情况下这两种情况通常都是单个类单例唯一,还有一种场景不是单个类的单例唯一而是要保证多个类唯一下面是比较长用的场景示例:
  • 项目框架设计中会有很多的功能组件,每一个功能组件都会对外提供一个manager(api抽象)满足外面访问和调用,这些功能manager通常都是单例唯一的,可以每一个都提供单例但是会很混乱,此时使用容器管理多对象的单例唯一就是个不错的选择。
  • 还有一种场景就是list等容器要保证内部对象的单例唯一,主要是线程的考虑,比如list add对象跨线程调用是不能保证添加的对象唯一,即时做了contail的校验判断,所以这个时候也得借助于单例模式的实现。retrofit的loadservicemethod就是这个场景的一种实现。
  • 对象单例的要素:
        * 构造方法私有,外面不能构造对象
        * 线程单例,外面可能多线程访问对象,线程的时间差内不会重复创建对象。
        * 对象的序列化和反序列化不会重新创建对象。
  1. 通过容器注册的方式实现容器对象的单例


    容器注册单例模式

        * 持有hashmap对象来缓存管理对象,并提供register和get两个api对子对象进行处理,特别注意的hashmap对象和register修饰符是private,私有不能被外面对象访问,仅能被当前整合manager管理类访问,而get方法则是公共的可以被外面对象访问,即外面只能取不能存。
        * manager的构造方法中调用register方法,利用manager的单例模式保证hashmap中的对象仅被注册一次,进而保持了对象的单例唯一。
        * 此模式比较适合项目架构中功能组件的manger的管理,架构开发者进行单例对象的注册,外层开发人员只是调用访问即可

  2. 使用加锁单例模式的方式实现容器对象的单例


    加锁单例模式

        * 代码和加锁双层校验单例模式一样,通过这种方式保证了容器内的对象唯一

你可能感兴趣的:(通过retrofit学习使用容器列表实现单例模式)