InfoQ|你应该了解的5种TypeScript设计模式( 二 )


但如果你决定使用工厂方法模式 , 则可以执行以下操作:
InfoQ|你应该了解的5种TypeScript设计模式
本文插图
现在 , 创建新对象所需的代码被封装到一个新类中 , 每种交通工具类型都对应一个 。 这样如果将来需要添加新类型 , 则只需添加一个新的类 , 不必修改任何现有的类 。
来看看我们如何使用 TypeScript 来实现这一点:
interface Vehicle { move: void } //The classes we care about, the "move" method is where our "business logic" would live class Car implements Vehicle { public move: void { console.log("Moving the car!") } } class Bicycle implements Vehicle { console.log("Moving the bicycle!") } } class Plane implements Vehicle { console.log("Flying the plane!") } } //The VehicleHandler is "abstract" because noone is going to instantiate it //We want to extend it and implement the abstract method abstract class VehicleHandler { //This is the method real handlers need to implement public abstract createVehicle: Vehicle //This is the method we care about, the rest of the business logic resides here public moveVehicle: void { const myVehicle = this.createVehicle myVehicle.move } } //Here is where we implement the custom object creation class PlaneHandler extends VehicleHandler{ public createVehicle: Vehicle { return new Plane } } class CarHandler extends VehicleHandler{ return new Car } } class BicycleHandler extends VehicleHandler{ return new Bicycle } } /// User code... const planes = new PlaneHandler const cars = new CarHandler planes.moveVehicle cars.moveVehicle本质上 , 我们最终关心的是自定义处理程序(handler) 。 之所以叫它们处理程序 , 是因为它们不仅负责创建对象 , 而且具有使用它们的逻辑(如 moveVehicle 方法所示) 。 这种模式的优点在于 , 如果要添加新的类型 , 你要做的就是添加其交通工具类和其处理程序类 , 而无需改动其他类的代码 。
观察者 在所有模式中 , 我最喜欢的是观察者 , 这是因为我们可以用它来实现的行为类型 。 听说过 ReactJS 吗?它就是基于观察者模式的 。 前端 JavaScript 中的事件处理程序听过吗?也是基于它的 , 起码理论上是一致的 。
关键在于 , 通过观察者模式 , 你可以实现它们以及更多事物 。
本质上 , 这种模式表明你具有一组观察者对象 , 这些对象将对观察到的实体的状态变化做出反应 。 为了做到这一点 , 一旦观察端收到更改 , 就会调用一个方法来通知观察者 。
实践中这种模式相对容易实现 , 来看代码:
type InternalState = { event: String } abstract class Observer { abstract update(state:InternalState): void


推荐阅读