# 设计模式

comming soon... 本文正在筹备中

先修知识:

  • 必须掌握一门面向对象编程语言
  • 最好有一定的较大规模软件开发经验

# 创建型

# 单例模式

# 工厂模式

# 原型模式

如果一个对象的创建非常耗费CPU时间;或者需要从外部系统、慢速IO中读取数据;或者其它难以创建的情况。那么可以考虑使用原型模式,直接从已有对象拷贝得到新对象。

在实践中很容易发现哪些场景需要使用原型模式,重点在于:

  • 区分深拷贝/浅拷贝
  • 语言/库是否有内置的深拷贝方法
  • 深拷贝如何处理循环引用的问题

如果需要手写深拷贝,那么方案有递归复制、序列化两种方法。

深拷贝往往很耗时,为了提升性能。一方面,我们可以结合业务,部分字段浅拷贝,部分字段深拷贝。另一方面,如果是不可变对象,可以大胆使用浅拷贝。

# 结构型

# 行为型

# 观察者模式

# 其它

# MVC

# 组合优于继承

使用继承的话,子类会调用父类的方法,就形成了子类对父类的依赖。父类内部的实现变动,可能会影响到子类。

参考《Effective Java》第四章第16条

# 附录

# 深拷贝

在原型模式中我们介绍了深拷贝,那么应该怎么实现呢?

在 JavaScript 中,我们可以使用 JSON.parse()JSON.stringify(),但它是有缺点的。我们还可以使用 lodash 提供的库函数 _.cloneDeep()