具有两个依赖于另一个属性的类的哪个模式

时间:2016-05-17 21:50:36

标签: design-patterns typescript

我想创建一个宏项。此宏项目可编辑。

每个宏项都有一个类型和一个eventValue。

有三种类型的项目(pressKey,releaseKey,delayInMs)

对于pressKeyEvent和releaseKeyEvent,我希望用户只能选择keyObject作为eventValue。

对于delayEvent,我希望用户只能选择一个整数作为eventValue。

现在我有了这个

export enum MacroEventEnum {
    pressKey,
    releaseKey,
    delayInMs
}

export class MacroItem {
    // This represent the type of the macro event
    public macroEvent: MacroEventEnum;
    // This represent the value associate with the macro event
    public macroEventValue: any;

    constructor(macroEvent: MacroEventEnum, macroEventValue: any) {
        this.macroEvent = macroEvent;
        this.macroEventValue = macroEventValue;
    }
}

问题是,当用户将macroEvent的类型更改为pressKey时,它仍然可以将时间用作macroEventValue。

在这种情况下应该使用什么样的模式,因为知道用户总是可以更改macroEvent。

感谢您的建议:)

1 个答案:

答案 0 :(得分:0)

您需要一个类层次结构:MacroItemKeyMacroItemDelayMacroItem,其中KeyMacroItemDelayMacroItem都从MacroItem继承。

MacroItem具有macroEvent属性,KeyMacroItem另外具有keyObject属性,DelayMacroItem还具有delayValue属性。您可以在MacroItem中使用KeyMacroItemDelayMacroItem覆盖虚拟方法,以根据自己的要求行事。