我正在使用用于“宏”的Java API来使一个软件自动化。该API除其他外,还具有Simulation(排序的全局状态)和FunctionManager类。我无法修改这些类。

我想创建一个BetterFunctionManagerextends FunctionManager,因为后者缺少一些有用的功能。但是我不知道该怎么做,因为FunctionManager无法直接实例化。必须从Simulation获得,如下所示:

Simulation simulation = getCurrentSimulation();
FunctionManager functionManager = simulation.getFunctionManager();

注意Simulation也不能直接实例化。它必须通过getCurrentSimulation()获得(当前的仿真是在运行时由宏解释器确定的)。

我不能灰心;以下引发ClassCastException:
BetterFunctionManager betterFunctionManager = simulation.getFunctionManager();

如何构造BetterFieldFunctionManager

最佳答案

免责声明:我对设计仍然很幼稚。只是一个建议。使用delegation design pattern

public class BetterFunctionManager{
    private FunctionManager fm;
    public  BetterFunctionManager(FunctionManager fm){
        this.fm = fm;
    }

    existingMethods(){
        fm.existingMethods();
    }

    newMethods(){
        // new implementation
    }
}

缺点:

需要包装FunctionManager的所有方法

优势:

无需在其他任何地方进行更改。只是改变像
BetterFunctionManager betterFunctionManager =
                 new BetterFunctionManager (simulation.getFunctionManager());

10-06 16:01