TypeScript 面向对象编程 – 抽象
抽象是面向对象编程又名 OOP 的概念之一,它能够从旨在保留关键方面的事物中删除不必要甚至复杂的特征。 我知道它真的看起来像:WTH!? 但是让我们举例和简化它,我不会用汽车的例子,我保证!
汽水机怎么样? 这可能是抽象的一个很好的例子。 要从汽水机中获取苏打水,我们无需知道在汽水机中按下分配器标签时会即时制作饮料。 加压二氧化碳罐和水泵将加压二氧化碳气体和冷水送入碳酸化器,在碳酸化器中混合,气体溶解到水中,然后加一点调味糖浆,瞧,这就是你的饮料。
在这种情况下,对我们来说重要的是能够按下按钮并等待我们的饮料,仅此而已,所以在这个抽象场景中,“按下这个按钮来喝一杯”是基本特征。 另一方面,假设你是一名工程师,并且有一些电话说按钮有时会卡住并且你需要修复它,到目前为止,仅知道如何喝水不足以修复机器,因此你需要深入了解并 知道汽水机是如何工作的,才能处理这个问题。
让我们开始编码
仍然使用汽水机的例子,让我们编写一些代码,我们需要在一个类中改造这台机器,目前我们知道的是:有一个独特的按钮,当按下时会掉一些汽水:
/**
* The Soda Fountain machines class
*/
class SodaMachine {
/**
* Returns the soda when pushed
*/
doPush() {
console.log('get your soda')
}
}
const soda = new SodaMachine()
soda.doPush()
L#4 — 创建一个 SodaMachine 类,它代表了汽水机蓝图
L#8 – 设置一个 doPush 方法,当推时会掉苏打水
L#13 — 使用 soda 常量实例化 SodaMachine 类
L#14 — 从实例化为 soda 的 SodaMachine 类调用 doPush 方法
假设我们仍在构建我们的汽水机,我们需要添加更多按钮,所以在这个新版本中,我们的机器将不只包含一个按钮,但现在我们可以提供另外两种口味,总共三种。
考虑到现在我们有更多关于我们机器的信息,让我们假设口味是:可乐、柠檬和橙子,所以让我们编码吧!
/**
* The Soda Fountain machines class
*/
/**
* Friendly enum for Soda Flavours
*/
enum ESodaFlavours {
COCA,
LEMON,
ORANGE
}
class SodaMachine {
/**
* Returns the soda when pushed
*/
doPush(flavour: ESodaFlavours) {
console.log(`get your soda flavour ${ESodaFlavours[flavour]}`)
}
}
const soda = new SodaMachine()
soda.doPush(0)
soda.doPush(1)
soda.doPush(2)
L#8 — 添加 ESodaFlavours 枚举以帮助机器识别所选风味
L#8 — 为 doPush 方法添加一个风味参数,它应该是 ESodaFlavours 枚举中的一个项目
L#25, L#26, L#27 – 模拟三种不同的按钮场景
我们的机器快完成了,我们只需要添加一些冰块,所以我们将添加一个与其他按钮完全不同的新按钮,按下它应该会掉落一些冰块:
/**
* The Soda Fountain machines class
*/
/**
* Friendly enum for Soda Flavours
*/
enum ESodaFlavours {
COCA,
LEMON,
ORANGE
}
class SodaMachine {
/**
* Returns the soda when pushed
*/
dropSoda(flavour: ESodaFlavours) {
console.log(`get your soda flavour ${ESodaFlavours[flavour]}`)
}
/**
* Drops ice cubes when pushed
*/
dropIce() {
console.log(`get your ice cubes`)
}
}
const soda = new SodaMachine()
soda.dropSoda(0)
soda.dropIce()
soda.dropSoda(1)
soda.dropSoda(2)
soda.dropIce()
L#18 — 从 doPush 到 dropSoda
L#25 — 添加 dropIce 方法来处理冰块请求
L#33, L#33 – 模拟用户请求加冰的苏打水的场景
我们终于完成了我们的汽水机制造并准备发布!
简而言之,抽象是指表示基本方面的行为,省略不必要的特征,就像我们之前所做的那样,抽象是 OOP 的一个有用的关键概念,它帮助我们在蓝图中转换了现实世界的机器。