不同语言对单例模式的不同实现
前言
前段时间在用 Python
实现业务的时候发现一个坑,准确的来说是对于 Python
门外汉容易踩的坑;
大概代码如下:
1 | class Mom(object): |
首先定义了一个 Mom
的类,它包含了一个字符串类型的 name
与列表类型的 sons
属性;
前段时间在用 Python
实现业务的时候发现一个坑,准确的来说是对于 Python
门外汉容易踩的坑;
大概代码如下:
1 | class Mom(object): |
首先定义了一个 Mom
的类,它包含了一个字符串类型的 name
与列表类型的 sons
属性;
随着最近关注 cim 项目的人越发增多,导致提的问题以及 Bug 也在增加,在修复问题的过程中难免代码洁癖又上来了。
看着一两年前写的东西总是怀疑这真的是出自自己手里嘛?有些地方实在忍不住了便开始了漫漫重构之路。
不知大家现在有没有去公司复工,我已经在家办公将近 3 周了,同时也在家呆了一个多月;还好工作并没有受到任何影响,我个人一直觉得远程工作和 IT 行业是非常契合的,这段时间的工作效率甚至比在办公室还高,同时由于我们公司的业务在海外,所以疫情几乎没有造成太多影响。
扯远了,这次主要是想和大家分享一下 Java
的 SPI
机制。周末没啥事,我翻了翻我之前的写的博客 《设计一个可拔插的 IOC 容器》,发现当时的实现并不那么优雅。
还没看过的朋友的我先做个前景提要,当时的需求:
我实现了一个类似于的 SpringMVC 但却很轻量的 http 框架 cicada,其中当然也需要一个 IOC 容器,可以存放所有的单例 bean。
这个 IOC 容器的实现我希望可以有多种方式,甚至可以提供一个接口供其他人实现;当然切换这个 IOC 容器的过程肯定是不能存在硬编码的,也就是这里所提到的可拔插。
当我想使用 A 的实现方式时,我就引入 A 的 jar 包,使用 B 时就引入 B 的包。