在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
这是从我的自由和最近出版的摘录书中的打字稿编程语言, 然而,另一个打字稿书 ( https://www.gitbook.com/book/pagalvin/yet-another-typescript-book/details )。 它来自第9章“深度学习”。 这里是: 抽象类抽象类完善了TypeScript对这种性质的层次结构的支持。 抽象类的外观看起来像是一个标准类,但有一个关键的例外:抽象类可能永远不会被实例化。 如果JavaScript是您的第一和主要编程语言,这似乎很奇怪。 但是,抽象类以及接口使开发人员能够自然而优雅地表达许多常见的软件设计模式。 让我们考虑一个例子。 想象一下,你在写游戏。 玩家在二维地图上放置不同类型的军事基地(例如“陆军”,“海军”)。 基地共享一些共同的特征,例如“名称”,但在重要细节上彼此不同。 陆军基地由士兵组成,海军基地由船组成。 最后,在运行时,玩家可以“**”基地。 这触发了基地在游戏中做出有意义的事情。 这是一种简单的建模方法: interface Activatable { class NaiveBase { class NaiveArmyBase extends NaiveBase implements Activatable{ constructor(name: string, totalSolders: number) { public ActivateSelf() { class NaiveNavyBase extends NaiveBase implements Activatable { constructor(name: string, totalShips: number) { public ActivateSelf() { const naiveArmyBase = new NaiveArmyBase("First army base", 100); // This is allowed but makes no sense: 到目前为止,这很简单。 海军的两个基类都实现了 这种建模方法存在一个问题:没有像普通香草NaiveBase这样的东西。 玩家从不创建香草基础,而总是创建特定类型的基础。 但是,没有什么可以阻止代码这样做的。 这里还有另一个问题。 这种方法迫使我们在每个类上实现 抽象类为我们解决了这个问题。 这是使用抽象类重写的代码: interface Activatable { abstract class AbstractBase implements Activatable{ constructor (name: string) { abstract ActivateSelf(): void; class ArmyBase extends AbstractBase { constructor(name: string, totalSolders: number) { public ActivateSelf() { class NavyBase extends AbstractBase { constructor(name: string, totalShips: number) { public ActivateSelf() { const armyBase = new ArmyBase("First army base", 100); // Compiler throws an error - abstract classes can not be instantiated: 本示例介绍了 abstract ActivateSelf(): void; 此抽象ActivateSelf方法满足Activatable接口的要求。 这是完美的,因为香草的“基地”无法有效地**自己-只有军队和海军基地才能做到这一点。 同时,它强制子类实现该方法。 这样做有两个好处:
抽象的基类显示了另一个功能:抽象的类可以定义非抽象类成员。 由于每个基准都有一个名称,而不管基准的类型如何,因此定义一个具体的 陆军和海军基地扩展了抽象类,就像它是使用相同的 总结该示例,您可以看到建立陆军和海军基地的工作方式与朴素的示例相同: const armyBase = new ArmyBase("First army base", 100); 由于两种类型的基础都实现了Activatable,因此您可以执行以下操作: const anotherArmyBase: Activatable = new ArmyBase("Second army base", 250); 让我们将它们放到一个视频中: From: https://hackernoon.com/abstract-classes-in-typescript-text-video-cda9a4e6a56a |
请发表评论