0、有用的知识
public 公共的,自身、子类、外部都可以访问。
protected 受保护的,仅自身、子类可以访问。
private 私有的,仅自身可以访问。
1、设计模式
单例模式
一个类只生成一个实例对象,往往作为管理类使用。
//demo1
class Manager {
//内部定义自身实例的静态变量
static Instance = new Manager()
private constructor() {}
}
Manager.Instance //外部访问该实例
//demo2 推荐
class Manager {
static private instance
private constructor() {}
//内部定义获取自身实例的静态方法
static Instance() {
//懒加载
if (!Manager.instance) {
Manager.instance = new Manager()
}
return Manager.instance
}
}
Manager.Instance() //外部访问该实例
代理模式
可替换代理对象,使不同代理对象执行同一套模式,可能获得不同的结果。
//demo
//代理目标A
class TargetA {
public getNumber (num1, num2) {
return num1 + num2
}
}
//代理目标B
class TargetB {
public getNumber (num1, num2) {
return num1 - num2
}
}
//代理
class Proxy {
//预留代理协议目标
public delegate
public getResult (num1, num2) {
const res = this.delegate.getNumber(num1, num2)
console.log('计算结果:', res)
}
}
const proxy = new Proxy() //设定代理协议目标
proxy.delegate = new TargetA() //或 new TargetB()
proxy.getResult(1,2) //结果 3 或 -1
观察者模式
当被观察对象发生变化时,会通知所有对应的观察者。
//demo
//观察者A
class ListenerA {
public onTextChange(newText) {
console.log('观察者A已监听到变化:', newText)
}
}
//观察者B
class ListenerB {
public onTextChange(newText) {
console.log('观察者B已监听到变化:', newText)
}
}
//被观察到目标
class Text {
//观察者数组
private observers = []
//登记观察者
public registerObserver(observer) {
observers.push(observer)
}
//被观察的内容
private text = '我还没有被修改'
//修改被观察内容的方法
setText(newText) {
this.text = newText
//遍历观察者数组,通知每个观察者内容被修改了
this.observers.forEach(observer => {
observer.onTextChange(newText)
})
}
}
const text = new Text()
const listenerA = newListenerA()
const listenerB = newListenerB()
//登记观察者
text.registerObserver(listenerA)
text.registerObserver(listenerB)
//改变被观察者
text.setText('我被修改了')
//观察者onTextChange被触发
//观察者A已监听到变化: 我被修改了
//观察者B已监听到变化: 我被修改了
工厂模式
通过同一个工厂类,根据不同需求生成不同的实例对象。
//demo
class Bmw {}
class Benz {}
class Audi {}
//工厂类
class Car {
static createBmw() {
return new Bmw()
}
static createBenz() {
return new Benz()
}
static createAudi() {
return new Audi()
}
}
//生成需要的实例对象
const bmw = Car.createBmw()
const benz = Car.createBenz()
const audi = Car.createAudi()