Java设计模式——单例模式
2017-10-28 本文已影响6人
icyage
Java设计模式
设计模式是被反复使用且被广泛验证的优秀的设计理念的总结,经过分类和归纳后,更容易被人们接受并使用在工程学中。
设计模式分类
范围 | 创建模式 | 结构模式 | 行为模式 |
---|---|---|---|
类 | 工厂方法(Factory Method) | 适配器(Adapter) | 解释器(Interpreter) |
类 | (Template Method) | ||
对象 | 抽象工厂(Abstract Factory) | 适配器(Adapter) | 责任链(Chain of Responsibility) |
对象 | 生成器(Builder) | 桥接(Bridge) | 命令(Command) |
对象 | 原型(Prototype) | 组成(Composite) | 迭代器(Iterator) |
对象 | 单例(Singleton) | 装饰器(Decorator) | 中介者(Mediator) |
对象 | 外观(Facade) | 备忘录(Memento) | |
对象 | 享元(Flyweight) | 观察者(Observer) | |
对象 | 代理(Proxy) | 状态(State) | |
对象 | 策略(Strategy) | ||
对象 | 访问者(Visitor) |
设计模式原则
- 开闭原则(Open Close Principle)
对扩展开放,对修改关闭- 里氏替换原则(Liskov Substitution Principle)
开闭原则的扩展- 依赖倒置原则(Dependence Inversion Principle)
对接口编程,依赖于抽象- 接口隔离原则(Interface Segregation Principle)
多接口实现,避免单一接口集中定义方法抽象- 迪米特法则(Demeter Principle)
最少知道原则- 合成复用原则(Composite Reuse Principle)
尽量使用组合,聚合等方式,替代继承
单例模式
这期介绍常用的单例模式
三要素
- 类只能有一个实例
- 必须由自身创建对象实例
- 必须由自身向调用方提供这个实例
单例模式是一种对象创建型模式。单例模式又名单件模式或单态模式。
java实现
解释
- 懒汉——懒加载方式,在使用的时候,如果不存在则创建
- 饿汉——饥饿家在方式,在未使用的时候,直接创建等待使用,始终线程安全
- 线程安全——单线程与多线程执行预期始终一致
- 懒汉方式,线程不安全
- 懒汉方式,线程安全
- 懒汉方式,线程安全高级版
该方式锁定的是实例引用资源,而不是类对象,这样该类的其他静态方法就不会收到影响。
- 饿汉方式
- 饿汉,变种
- 静态内部类
- 枚举
总结
这里由很多单例的实现,线程安全的不安全的,懒汉模式,饿汉模式等组合。需要大家关注的是这里面所用到的Java特性。这里推荐静态内部类和枚举的方式来实现。
常见面试问题
- 使用过哪些设计模式
- 手写单例模式
- 怎么做到线程安全
- 如何更优雅的实现单例模式
感兴趣的朋友希望能留言交流,有好的建议可以提出来,大家一起进步多谢。