Java中的设计模式
设计模式-单例模式1
设计模式
前辈们对代码开发经验的总结,是解决特定问题的一系列套路。设计语言不限制于任何开发语言,本人是以为java开发者,所以在此使用java语言演示。
设计模式原则:开闭原则、里氏替换原则、依赖倒置原则、单一责任原则、接口隔离原则、最少知识原则、合成复用原则(后续会有讲述)
单例模式
单例模式是什么?单例模式的定义是一个类只有一个实例,且该类可以自行创建这个实例的一种模式。举个例子。比如window的电脑始终只有一个任务管理器,但它允许多个窗口打开。
单例模式的特点:
1.该单例类只有一个实例对象
2.该实例对象必须由单例类自行创建
3.单例类对外提供一个访问该单例的全局访问点
单例类的优缺点
优点:单例模式可以保证内存里只有一个实例,减少了内存的开销;可以避免对资源的多重占用;单例模式设置全局访问点,可以优化和共享资源的访问。
缺点:
单例模式一般没有接口,扩展困难。如果要扩展,则除了修改原来的代码,没有第二种途径,违背开闭原则;
在并发测试中,单例模式不利于代码调试。在调试过程中,如果单例中的代码没有执行完,也不能模拟生成一个新的对象;
单例模式的功能代码通常写在一个类中,如果功能设计不合理,则很容易违背单一职责原则。
单例模式在java中的实现
1.懒汉式,线程不安全的在多线程环境下测试如下:
在多线程的环境下该方式存在不满足一个单例类只有一个实例对象。可以是synchronized、加锁的方式进行优化。
2.饿汉式,线程安全的可见饿汉式是线程安全的。
懒汉式通过加锁的方式也是可以实现多线程下单例模式的线程安全。
如果用反射区创建单例实例呢?可见饿汉式下无法避免通过反射创建该对象后保持同一个单例对象
可私有化构成函数里增加一个判断 避免单例对象被二次创建,效果如下:
本章简单的介绍与实现单例模式,单例模式的其他实现方式(如双检锁,枚举方式)在下一篇文章介绍与实现。本文是用于自身学习,若有不足之处.请多多指教!请大家提出意见与不足之处。