【发布时间】:2019-05-29 13:16:11
【问题描述】:
我已经构建了一个模拟生活的游戏,现在我正在尝试清理代码并使其更加面向对象。尽管搜索了几天,但我很难用多态性替换条件。
所以我有一个 component.ts 一个游戏模型和一个单元模型。单元模型包含属性status: boolean 等等。它可以是死的或活的。然后我让用户能够在启动时切换单元格状态。因此,我尝试创建一个抽象类的状态,然后创建两个死或活的子类,但我不确定这是否是正确的方法。
这是cell.model
import { Coordinates } from './coordinates.model';
export class Cell {
private coordinates: Coordinates;
public status: string;
constructor(coordinates) {
this.coordinates = coordinates;
this.status = new Alive().status;
}
getCoordinates(): Coordinates {
return this.coordinates;
}
toggleCell(): void {
console.log(this.status)
}
}
export abstract class Status {
status: string;
abstract setStatus(): string;
}
export class Alive extends Status {
status = 'alive';
setStatus(): string {
return this.status = 'dead';
}
}
export class Dead extends Status {
status = 'dead';
setStatus(): string {
return this.status = 'alive';
}
}
在如下所示的游戏模型中,我使用条件来更改状态
toggleCell(cellIndex: number) {
const cell: Cell = this.cells[cellIndex];
// if (this.cells[cellIndex].status === 'dead') {
// this.cells[cellIndex].status = 'alive';
// this.addToLivingCells(cellIndex);
// } else {
// this.cells[cellIndex].status = 'dead';
// this.removeFromLivingCells(cellIndex);
// }
cell.toggleCell()
}
所以我想要做的是删除条件并使用多态性根据当前状态将状态从死亡切换到活着并返回。
如果需要其余代码,请告诉我。
提前致谢
【问题讨论】:
-
还没有真正看到在 Angular/TypeScript 中使用该模式。为什么你认为它比使用条件更好?
-
@SiddAjmera,我认为这是为了提高可扩展性/可重用性和测试,但不确定具体的好处。但是我的 Typescript 是 OOP,所以不应该也可以在这里应用吗?这就是为什么我想我无法在网上找到一个答案。大多数示例向您展示了如何创建类,但它们并未展示您如何从代码中实际调用它。在这种情况下,切换功能
标签: angular typescript polymorphism