# 设计模式
comming soon... 本文正在筹备中
先修知识:
- 必须掌握一门面向对象编程语言
- 最好有一定的较大规模软件开发经验
# 创建型
# 单例模式
# 工厂模式
# 原型模式
如果一个对象的创建非常耗费CPU时间;或者需要从外部系统、慢速IO中读取数据;或者其它难以创建的情况。那么可以考虑使用原型模式,直接从已有对象拷贝得到新对象。
在实践中很容易发现哪些场景需要使用原型模式,重点在于:
- 区分深拷贝/浅拷贝
- 语言/库是否有内置的深拷贝方法
- 深拷贝如何处理循环引用的问题
如果需要手写深拷贝,那么方案有递归复制、序列化两种方法。
深拷贝往往很耗时,为了提升性能。一方面,我们可以结合业务,部分字段浅拷贝,部分字段深拷贝。另一方面,如果是不可变对象,可以大胆使用浅拷贝。
# 结构型
# 行为型
# 观察者模式
# 其它
# MVC
# 组合优于继承
使用继承的话,子类会调用父类的方法,就形成了子类对父类的依赖。父类内部的实现变动,可能会影响到子类。
参考《Effective Java》第四章第16条
# 附录
# 深拷贝
在原型模式中我们介绍了深拷贝,那么应该怎么实现呢?
在 JavaScript 中,我们可以使用 JSON.parse()
和 JSON.stringify()
,但它是有缺点的。我们还可以使用 lodash 提供的库函数 _.cloneDeep()
。