Java中的设计模式-基于场景的设计模式学习记录

关于Java中的设计模式

先来个脑图:

阿里云

很久没更新博客了,七月以来和之前的老大一起去创业,最近真的是非常忙。

这次开发自己的产品又有了很多不一样的感觉,而且这应该也是我开发的第一个2C的互联网产品吧,挺开心的。

所以最近代码写的多,思考的也多,设计模式应该算是每个程序员从学习开始起步到职业生涯中前期始终贯穿的一个学习主线,从无知到有知,从刻意使用到不着痕迹的水到渠成,设计模式让我们能够读懂成熟的框架代码,也是程序员之间沟通的一道桥梁。

同时其本身也是很多场景下的最佳实践,所以学好设计模式对于我们写代码,学框架都有很大的作用。

我本身是野路子,同时本身也走了不少弯路,这次又来学习一编设计模式,这次我会细嚼慢咽,同时结合真正的使用场景来学习,因为我觉得场景化的才是看的见摸得着的,OK,话不多说,开整吧。

1. 单例模式

这个应该是大家最早接触的一个设计模式,也是一个常用的设计模式。

单例模式,它的核心定义是这个类的对象是全局唯一的,单例对象必须保证只有一个实例存在。同时它同时单例模式具备三个特点:

  1. 只有一个实例。
  2. 自我实例化。
  3. 提供全局访问方法。

应用场景:

某些对象不需要重复实例化,可能构建这个对象的开销很高,也可能这个对象具有某些状态,如果状态不一致会引发某种错误,只存在一个对象有利于我们协调系统的整体行为。比如Spring中的配置类,作为全局唯一的,整个子模块的常量都从配置类中获取。

或者是各种客户端的获取与构建,比如去年做AWS相关业务的时候构建EC2,S3客户端,以及现在构建OSS客户端,我们的场景都是秘钥是固定的,所以只需要构建一次这个客户端就行了。

使用单例也可以节约系统资源,提高效率,但是单例类比较容易职责过重,这就违背了面向对象设计原则的”单一职责原则”,同时单例类之上不存在抽象接口,所以不易于扩展。

同时在多线程的场景下,如果2个线程同时调用创建方法,如果没有做互斥操作的话,有可能出现多个对象,从而违反唯一实例原则。


本文参考:

wiki百科

Java设计模式总结之23种设计模式

分享到:
0%