阅读 288

设计模式(五)创建型设计模式

经典的设计模式一共有23种,分别是创建型,结构型,行为型。

创建型有四种,分别是,单例模式,工厂模式,建造者模式,原型模式。

单例模式

定义: 保证一个类仅有一个实例,并提供一个访问它的全局访问点。

单例模式主要是通过 if 语句判断是否已经创建过一个实例。如果已创建返回该实例。

开发中我们有些对象只需要一个,比如浏览器的 window 对象,还有 Vue 框架中的 VueX 全局管理对象。

单例模式的实现方式:

  • 恶汉式: 在类加载期间,就实例化 instance。

  • 懒汉式:在需要的时候再创建instance。

  • 双重检测: 只要 instance 被创建之后,再调用 getInstance()函数也不会再进入加锁逻辑中。

  • 静态内部类: 利用 java 静态内部类实现单例。

  • 枚举: Java枚举本身特性。

单例存在哪些问题?

  • 单例对 OOP 特性的支持不友好

  • 单例会隐藏类之间的依赖关系

  • 单例对代码的扩展性不友好

  • 单例对代码的可测试性不友好

  • 单例不支持有参数的构造函数

工厂模式

定义:将创建对象的过程单独封装。

当我们需要创建一大堆类似的对象的时候,通过不同的条件生成不同的对象。使用工厂模式,只需要把参数传入即可。

当创建对象的逻辑比较简单的时候,使用简单工厂模式。

当创建对象的逻辑比较复杂的时候,使用工厂方法。

建造者模式

定义:造者模式就是如何一步步构建一个包含多个组成部件的对象,相同的构建过程可以创建不同的产品。

建造者模式参数是不固定的,根据传入的参数定制。

工厂模式和建造者模式区别:

工厂模式是用来创建不同但是相关类型的对象,由给定的参数来绝对创建那种类型的对象。建造者模式是用来创建一种类型的复杂对象,可以通过设置不同的可选参数定制化创建不同的对象。

原型模式

定义:如果对象创建的成本比较大,二一个类的不同对象之间差别不大,我们就可以利用已有对象进行复杂,来创建对象,达到节约时间的目的。

实现方法:

1.深拷贝可以得到一个完全独立的对象。

2.浅拷贝只复制基本数据类型和引用类型的内存地址。

参考资料

极客时间《设计模式之美》

曾探 《JavaScript 设计模式和开发实践》

修言 《JavaScript 设计模式核⼼原理与应⽤实践》