组合模式
就跟react的 createElement 方法出不多, 他去把虚拟dom的一个js对象树给实现了
命令模式
命令模式可以理解成, 客户, 前台, 跟(保洁, 厨师 等等) ,
客户: 客户只需要给前台打电话说,我需要保洁或者吃饭,但是客户不需要清楚,具体是谁来给他做饭还是保洁;
前台: 前台收到客户的需求之后,就会发布命令,然指定的人去客户那里做保洁,或者是煮饭
保洁, 厨师: 他们收到命令后,就会去执行他们的工作,他们不管谁发布指令的,只需要做一个无情的打工人就好了
class Cooker {
cook() {
console.log("做饭");
}
}
class Cleaner {
clean() {
console.log("打扫");
}
}
class CookCommend {
receiverObj;
constructor(receiver: any) {
this.receiverObj = receiver;
}
execute() {
this.receiverObj.cook();
}
}
class CleanCommend {
receiverObj;
constructor(receiver: any) {
this.receiverObj = receiver;
}
execute() {
this.receiverObj.clean();
}
}
class Customer {
commendObj;
constructor(commend: any) {
this.commendObj = commend;
}
setCommend(commend: any) {
this.commendObj = commend;
}
clean() {
this.commendObj.execute();
}
cook() {
this.commendObj.execute();
}
}
let cooker = new Cooker();
let cleaner = new Cleaner();
let cookCommend = new CookCommend(cooker);
let cleanCommend = new CleanCommend(cleaner);
let customer = new Customer(cookCommend);
customer.cook();
customer.setCommend(cleanCommend);
customer.clean();
享元模式
享元模式: 就是 flyWeight, 就是轻量级的意思, 就是我们该封装的时候就封装,该通用的就通用,该独立就独立使用, 节约内存的损耗
比如说是这个样子
function Person(name, age) {
// 这里的数据是私有的
this.name = name;
this.age = age;
}
// 这个的方法是公有的
Person.prototype.getName = function() {
return this.name;
}
Person.prototype.getAge = function() {
return this.age;
}
const pp1 = new Person("a", 10);
pp1.getName();
const pp2 = new Person("b", 20);
pp2.getAge();
模板方法模式
模板就是我们定义好模板规则,子元素去继承, 重写他的模板就好了
class Person1 {
dinner() {
this.buy();
this.cook();
this.eat();
}
buy() {
throw new Error("必须有子类实现");
}
cook() {
throw new Error("必须有子类实现");
}
eat() {
throw new Error("必须有子类实现");
}
}
class Aaa extends Person1{
buy() {
console.log("买东西");
}
cook() {
console.log("煮饭");
}
eat() {
console.log("吃东西");
}
}
let aaaa = new Aaa();
aaaa.cook();
其他的模式:
工厂模式
单例模式
适配器模式
装饰器模式
代理模式
观察者模式
策略模式
原型模式
桥接模式
具体的细节, 请参考这个视频, 讲的确实不错, 去这里