查阅资料发现设计模式大致可以分成三类:
创建型模式 ( Creational Patterns )
这类设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式, 而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活, 典型的有工厂模式(Factory Pattern)、单例模式
结构型模式(Structural Patterns)
这类设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。 比如 装饰器模式(Decorator Pattern) 和 代理模式(Proxy Pattern)
行为型模式(Behavioral Patterns)
这类设计模式特别关注对象之间的通信。 比如 观察者模式(Observer Pattern)
工厂模式(Factory Pattern)是最常用的设计模式之一, 在工厂模式下,客户不需要关心产品制作过程, 只需要简单输入几个需求就行, 如果没有需求属性,新增也很方便
创建基类
class Shoe {
constructor(size, color) {
this.size = size //鞋子尺寸
this.color = color //鞋子颜色
}
//大家都知道鞋子上都有铭牌介绍
introduction() {
console.log(`我是一双 ${this.size} 码 ${this.color} 的鞋 `)
}
}
复制代码
继承基类
class Nike extends Shoe {
constructor(...args) {
super(...args)
}
}
class Adidas extends Shoe {
//create() {}
}
class NewBalance extends Shoe {
//create() {}
}
复制代码
搭建工厂
接下来创建工厂, 这里就以莆田为例创建一个高仿 假鞋
工厂
class PuTian {
constructor(name) {
this.name = name
}
//下订单
order(size, color) {
switch (this.name) {
case 'Nike':
return new Nike(size, color);
case 'Adidas':
return new Adidas(size, color);
case 'NewBalance':
return new NewBalance( size, color);
case '回力':
return '这个牌子利润太低我做不了!!!'
}
}
}
复制代码
看到这,大家应该感觉到了, 平时开发中可能无形中用过很多次工厂模式了
向工厂下单
这时候来订单了, 客户提需求了, 比如想定做 一双
阿迪达斯莆田鞋
const newShoe = new PuTian('Adidas').order(42, '蓝色')
//拿到鞋我们打印下真伪
newShoe.introduction()
复制代码
当然一般人工厂不接受1双定制, 比如 500双起 做, 所以我们需要拓展下功能
//我们可以直接在基类里添加一个定制数量的方法
class Shoe {
constructor(size, color) {
this.size = size //鞋子尺寸
this.color = color //鞋子颜色
}
//大家都知道鞋子上都有铭牌介绍
introduction() {
console.log(`我是一双 ${this.size} 码 ${this.color} 的鞋 `)
}
make(pairs) {
let i = 0;
while(i < pairs) {
//机器重复做500双鞋
i++
}
}
}
复制代码
设置数量
const newShoe = new PuTian('Adidas').order(42, '蓝色')
newShoe.make(500)
//是不是看起来挺方便的
复制代码
抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。
abstract class AbstractFactory {
}
复制代码
其它语言可以用abstract 创建抽象方法, 但是js 目前abstract还只是保留字, 并且这个方法比较难理解,这里暂时不介绍了, 以后有机会再更新
什么时候用
作为一种创建类模式,在需要生成复杂对象的地方,都可以使用工厂模式。 而简单对象,特别是只需要通过 new 就可以完成创建的对象,无需使用工厂模式。如果使用工厂模式,就需要引入一个工厂类,会增加系统的复杂度。
最后的轻语
我以前一直好奇为什么有人在 咖啡厅 这种嘈杂环境下办公学习, 后来才知道 心理学里面有一种概念叫 “ 心流(将人的精神完全投入到某种事情上) ” ,要让自己进入这种状态, 有些人在咖啡厅可能在锻炼这种能力, 不管外界发生啥了, 都要把眼前事情做好