InfoQ|你应该了解的5种TypeScript设计模式
作者 | Fernando Doglio 译者 | 王强 策划 | 蔡芳芳
【InfoQ|你应该了解的5种TypeScript设计模式】本文最初发布于 Medium 网站 , 经原作者授权由 InfoQ 中文站翻译并分享 。
设计模式是解决问题的良好模板 , 开发人员可以在自己的项目应用这些模式处理需求 。 现实中应付各种需求的模式数不胜数 , 一篇文章无法尽述 。 不过它们可以大致分为三个类别:
- 结构模式 , 负责处理不同组件(或类)之间的关系 , 并形成新结构以提供新功能 。 结构模式的例子有组合(Composite)、适配器(Adapter)和装饰器(Decorator) 。
- 行为模式 , 它们能将组件之间的通用行为抽象为一个单独的实体 , 进而与你的创建模式结合起来 。 行为模式的例子包括命令(Command)、策略(Strategy)以及我个人最喜欢的一种:观察者(Observer)模式 。
- 创建模式 , 它们专注于类的实例化 , 简化新实体的创建过程 , 例如工厂(Factory)方法、单例(Singleton)和抽象工厂(Abstract Factory) 。
单例 单例模式可能是最著名的设计模式之一 。 这是一种创建模式 , 它可以确保无论你多少次实例化一个类 , 你都只会有一个实例 。
这是处理数据库连接之类场景的好方法 , 因为你可能希望一次只处理一个连接 , 而不必在每次用户请求时都重新连接 。
//Simulate a database connectino class
class MyDBConn{
protected static instance: MyDBConn | null = null
private id: number = 0
constructor {
//... db connection logic
this.id = Math.random //the ID could represent the actual connection to the db
}
public getID: number {
return this.id
}
public static getInstance: MyDBConn {
if(!MyDBConn.instance) {
MyDBConn.instance = new MyDBConn
}
return MyDBConn.instance
}
}
const connections = [
MyDBConn.getInstance,
MyDBConn.getInstance
]
connections.forEach( c => {
console.log(c.getID)
现在你不能直接实例化这个类 , 但使用 getInstance 方法时 , 你可以确保不会有多个实例 。 在上面的示例中 , 你可以看到包装数据库连接的伪类是怎样从这一模式中受益的 。 很容易将 id 属性视为实际连接 , 而这个小测试向你展示了 , 无论你调用 getInstance 方法多少次 , “连接”总是相同的 。 代码的输出是: 0.4047087250990713
0.4047087250990713
0.4047087250990713
0.4047087250990713
0.4047087250990713
工厂方法 如前所述 , 工厂方法像单例一样也是一种创建模式 。 但这种模式不是直接针对我们要创建的对象 , 而只管理它们的创建过程 。解释一下:假设你要编写移动一些交通工具的代码 , 它们的类型有很大区别(例如汽车、自行车和飞机) , 移动代码应封装在每个交通工具类中 , 但调用这些 move 代码的方法可以是通用的 。
这里的问题是如何处理对象创建?你可能有一个具有 3 个方法的 creator 类 , 或者一个接收一个参数的方法 。 无论哪种情况 , 要扩展这种逻辑以支持创建更多交通工具 , 都需要你修改同一个类 。
推荐阅读
- 中年|全球饮茶风尚兴起 你真的了解袋泡茶吗?
- 京东|常说 AMD YES,却不知选哪款 A 卡好?或许应该看看这些
- 品谷农产品|专业的软件开发流程,应该是怎样的呢?
- 手机|当手机失窃信息被盗后我们应该怎么办?
- 科学,NASA|月球之旅应该带什么?NASA邀请人们分享心中答案
- 这样做|和平精英:萌新最易犯守楼误区,千万别卡楼梯口,你应该这样做
- 手机|手机选购先看需求,主力机或者备用机?这些价位也需要了解
- 达蒙砂轮|价格再次跌至谷底!切割片生产厂家究竟该如何定价?一、了解产品对于客户的价值二、细分目标市场生产差异化产品三、顺应市场变化,不断创
- 管径|管道天天见,管径搞不懂?一文了解De、DN、D、d、Φ区别
- 电视|还在为孩子看电视伤视力而烦恼?海信激光电视了解下