Java中的设计模式

设计模式

前辈们对代码开发经验的总结,是解决特定问题的一系列套路。设计语言不限制于任何开发语言,本人是以为java开发者,所以在此使用java语言演示。
设计模式原则:开闭原则、里氏替换原则、依赖倒置原则、单一责任原则、接口隔离原则、最少知识原则、合成复用原则(后续会有讲述)

单例模式

单例模式是什么?单例模式的定义是一个类只有一个实例,且该类可以自行创建这个实例的一种模式。举个例子。比如window的电脑始终只有一个任务管理器,但它允许多个窗口打开。

单例模式的特点:

1.该单例类只有一个实例对象
2.该实例对象必须由单例类自行创建
3.单例类对外提供一个访问该单例的全局访问点

单例类的优缺点

优点:单例模式可以保证内存里只有一个实例,减少了内存的开销;可以避免对资源的多重占用;单例模式设置全局访问点,可以优化和共享资源的访问。
缺点:
单例模式一般没有接口,扩展困难。如果要扩展,则除了修改原来的代码,没有第二种途径,违背开闭原则;
在并发测试中,单例模式不利于代码调试。在调试过程中,如果单例中的代码没有执行完,也不能模拟生成一个新的对象;
单例模式的功能代码通常写在一个类中,如果功能设计不合理,则很容易违背单一职责原则。

单例模式在java中的实现

1.懒汉式,线程不安全的
Java中的设计模式在多线程环境下测试如下:
Java中的设计模式Java中的设计模式Java中的设计模式
在多线程的环境下该方式存在不满足一个单例类只有一个实例对象。可以是synchronized、加锁的方式进行优化。
2.饿汉式,线程安全的
Java中的设计模式Java中的设计模式可见饿汉式是线程安全的。
懒汉式通过加锁的方式也是可以实现多线程下单例模式的线程安全。
如果用反射区创建单例实例呢?
Java中的设计模式可见饿汉式下无法避免通过反射创建该对象后保持同一个单例对象
Java中的设计模式可私有化构成函数里增加一个判断 避免单例对象被二次创建,效果如下:
Java中的设计模式本章简单的介绍与实现单例模式,单例模式的其他实现方式(如双检锁,枚举方式)在下一篇文章介绍与实现。本文是用于自身学习,若有不足之处.请多多指教!请大家提出意见与不足之处。