迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > TypeScript >

TypeScript 面向对象编程 - 抽象

作者:迹忆客 最近更新:2022/10/16 浏览次数:

抽象是面向对象编程又名 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 的一个有用的关键概念,它帮助我们在蓝图中转换了现实世界的机器。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

PHP 抽象类

发布时间:2023/03/27 浏览次数:139 分类:PHP

本教程演示了如何在 PHP 中创建和使用抽象类。

在 TypeScript 中返回一个 Promise

发布时间:2023/03/19 浏览次数:182 分类:TypeScript

本教程讨论如何在 TypeScript 中返回正确的 Promise。这将提供 TypeScript 中 Returns Promise 的完整编码示例,并完整演示每个步骤。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便