angular - 使用打字稿模型类时将条件替换为多态
问题描述
我已经建立了一个生活模拟游戏,现在我正在尝试清理代码并使其更加面向对象。尽管搜索了几天,我还是很难用多态性替换条件。
所以我有一个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()
}
所以我想要做的是删除条件并使用多态性根据当前状态将状态从死亡切换到活着并返回。
让我知道是否需要其余代码。
提前致谢
解决方案
对于这样一个简单的案例,我认为您的方法太复杂了。对于这种情况,这段代码就足够了:
export class Cell {
private coordinates: Coordinates;
public status: 'alive' | 'dead';
constructor(coordinates) {
this.coordinates = coordinates;
this.status = 'alive';
}
getCoordinates(): Coordinates {
return this.coordinates;
}
toggleCell(): void {
this.status = this.status === 'alive' ? 'dead' : 'alive';
console.log(this.status);
}
}
推荐阅读
- laravel-5.6 - 在运行 http://127.0.0.1:8000/products 时,它说 products.index not found
- java - 如何使用elasticsearch获取搜索结果?
- c - __attribute__((malloc)) vs 限制
- javascript - 在查看几个日期字符串后,是否有编程方式来识别日期格式?
- javascript - 无法在 Laravel 应用程序中使用 AJAX 进行搜索
- java - 气泡排序模块似乎不起作用;输出错误列表(java)
- r - ggplot:添加图例并删除图形的填充
- charts - 2 轴格式日期谷歌图表的问题
- scala - Spark SQL 窗口平均值问题
- php - 如何让 Chrome 解释 php?这有什么插件吗?