微信公众号:BoomDev
如有问题或建议请留言
最近更新:2018-06-05
谈谈你知道的设计模式、请手动实现单例模式
典型回答:
设计模式可以分为创建型模式、结构型模式和行为型模式:
创建型模式
:是对对象创建过程的各种问题和解决方案的总结、包括各种工厂模式(Factory、Abstract Factory)、单例模式(Singleton)、构建器模式(Builder)、原型模式(ProtoType)结构型模式
:是针对软件设计结构的总结、关注于类、对象继承、组合方式的实践经验。常见的结构型模式、包括桥接模式(Bridge)、适配器模式(Adapter)、装饰者模式(Decorator)、代理模式(Proxy)、组合模式(Composite)、外观模式(Facade)、享元模式(Flyweight)行为型模式
:是从类或对象之间交互、职责划分等角度总结的模式。比较常见的行为型模式有策略模式(Strategy)、解释器模式(Interpreter)、命令模式(Command)、观察者模式(Observer)、迭代器模式(Iterator)、模板方法模式(Template Method)、访问者模式(Visitor)
扩展分析
常见单例
- 可以为单例定义一个 private 的构造函数
- 使用懒加载(lazy-load)、改善初始内存开销
|
|
这个实现在单线性中是不存在问题的、但是在并发场景中就需要考虑线程安全、最熟悉的莫过于双检锁
:
双检锁单例
- 利用 volatile 能够提供可见性、以及保证 getInstance 返回的是初始化完全的对象
- 在同步之前 null 检查、尽量避免进入相对昂贵的代码同步块
- 直接在 class 级别进行同步、保证线程安全的类方法调用
|
|
在这段代码中、争论较多的是 volatile 修饰静态变量、当 Singleton 类本身有多个成员变量时、需要保证初始化过程完成后、才能被 get 到
内部类单例
|
|
内部类模式和双检锁都可以保证线程安全
我是一名有备而来的 Android 工程师
微信公众号:BoomDev
欢迎关注我、一起学习、一起进步!