首页 > 解决方案 > 使用打字稿模型类时将条件替换为多态

问题描述

我已经建立了一个生活模拟游戏,现在我正在尝试清理代码并使其更加面向对象。尽管搜索了几天,我还是很难用多态性替换条件。

所以我有一个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()
}

所以我想要做的是删除条件并使用多态性根据当前状态将状态从死亡切换到活着并返回。

让我知道是否需要其余代码。

提前致谢

标签: angulartypescriptpolymorphism

解决方案


对于这样一个简单的案例,我认为您的方法太复杂了。对于这种情况,这段代码就足够了:

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);
    }
}

推荐阅读