如果您无法动态更改对象的类怎么办?

时间:2019-07-30 05:47:01

标签: typescript oop inheritance

我正在用打字稿做一个小型足球比赛,希望允许用户一次控制一个球员,但他们可以切换以控制另一个球员。我有一个包含属性的播放器类和一个getNextMove方法,无论该播放器是由用户还是由AI控制,都将需要该方法。但是,我希望getNextMove方法实现不同的逻辑,具体取决于播放器是由用户还是由AI控制。

我正在考虑实现一个User类和一个AI类,这些类实现Player类并随后实现getNextMove方法。

这符合我的想法

interface Player {
    ...
    getNextMove()
}

class User implements Player{
    getNextMove(){
        // Take user input
    }
}

class AI implements Player{
    getNextMove(){
        // Decide next move automatically
    }
}

但是,随着用户更换玩家,他们刚刚控制的玩家将需要切换回使用AI逻辑。我不认为可以动态地切换类,也不能认为不在Object结构之外,也找不到可以实现我想要的东西的东西。任何建议都非常感谢。

1 个答案:

答案 0 :(得分:1)

我同意JB Nizet。

使用strategy模式。

class UserState {
    // properties
}

class User {
    constructor(){
        this.state = new UserState();
    }

    activateUserControl(){
        this.moveStrategy = new UserControlStrategy(this.state);
    }

    activateAI(){
        this.moveStrategy = new AIControlStrategy(this.state);
    }

    getNextMove(){
        this.moveStrategy.nextMove();
    }
}