Android 使用匕首,可以重新创建注入的对象吗?
A具有与此类似的代码: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();
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();
}
}
我想在这里介绍一下战略。但我有两个问题:
在这种情况下,手动创建注入对象可以吗?有人看到其他解决方案吗?正如您所说,向提供者方法添加逻辑不是一个好的设计决策。在某些情况下,手动实例化对象是有效的,但只能作为最后手段 在这种情况下,最好的方法(IMHO)是注入抽象工厂,按需实例化
IStrategy
实现
在当前情况下,工厂方法需要接受额外的参数,允许您指定感兴趣的策略。虽然这不是世界末日,但客户控制其使用的策略这一事实有点不明确——客户知道有多少种策略
根据手头的特定用例,您可能能够重构代码并从客户机中提取区分不同策略的逻辑。这样,您的客户将要求
IStrategy
,同时完全不知道实现的细节和可用实现的数量 回答得好。只是重构了一个策略工厂,看起来更干净。谢谢