cocos3.x学习之路 - 常用设计模式

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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值