Android 使用匕首,可以重新创建注入的对象吗?

Android 使用匕首,可以重新创建注入的对象吗?,android,dagger,Android,Dagger,A具有与此类似的代码: class MyActivity extends Activity { IStrategy mStrategy; public void onCreate(Bundle data) { if (someSpecificCondition) { mStrategy = new StrategyA(); } else { mStrategy = new StrategyB();

A具有与此类似的代码:

class MyActivity extends Activity {
    IStrategy mStrategy;

    public void onCreate(Bundle data) {
        if (someSpecificCondition) {
            mStrategy = new StrategyA();
        } else {
            mStrategy = new StrategyB();
        }
    }

    public void onUnsupportedState() {
        // Will have to switch strategy
        mStrategy = new StrategyB();
    }
}
我想在这里介绍一下战略。但我有两个问题:

  • 它是一个接口,具体实现是动态变化的
  • 即使选择了具体的实现,也有可能需要重新创建它
  • 我可以通过创建一个带有决策逻辑的方法来克服(1)(但不确定这是否是最好的方法)

    但我不知道该怎么办。
    在这种情况下,手动创建注入对象可以吗?有人看到其他解决方案吗?

    正如您所说,向提供者方法添加逻辑不是一个好的设计决策。在某些情况下,手动实例化对象是有效的,但只能作为最后手段

    在这种情况下,最好的方法(IMHO)是注入抽象工厂,按需实例化
    IStrategy
    实现

    在当前情况下,工厂方法需要接受额外的参数,允许您指定感兴趣的策略。虽然这不是世界末日,但客户控制其使用的策略这一事实有点不明确——客户知道有多少种策略


    根据手头的特定用例,您可能能够重构代码并从客户机中提取区分不同策略的逻辑。这样,您的客户将要求
    IStrategy
    ,同时完全不知道实现的细节和可用实现的数量

    回答得好。只是重构了一个策略工厂,看起来更干净。谢谢