【问题标题】:Design pattern for creating object graph创建对象图的设计模式
【发布时间】:2018-01-19 22:16:31
【问题描述】:

我有一种情况,我想在我的 android 应用程序中创建实例层次结构(属于单独的类),其中每个对象都是独立的,即它们履行自己的职责。所以我不需要任何其他类来保存对这些对象的引用并调用这个类的任何方法。但是我需要任何入口点,即这些类应该在控制器类被实例化时被实例化。

我使用匕首来进行对象实例化。因此,如果 MyClassA 和 MyClassB 是两个独立的类,当 MyController 被实例化时应该被实例化,它的构造函数将如下所示

@Inject
public MyController(MyClassA a, MyClassB b) {
  ...
}

但 MyController 没有理由保留这些引用。因此代码看起来很混乱,因为 MyController 似乎不必要地注入了这两个参数,即使它不使用它们。

在这种情况下是否有建议的设计模式可以避免这种混淆?

【问题讨论】:

    标签: java android design-patterns dagger


    【解决方案1】:

    使用构建器模式。不是注入 MyClassA 和 MyClassB,而是注入一个组件构建器,它创建一个可以创建 MyClassA 和 MyClassB 的组件(图)。您不一定需要注入这些对象,而只需注入构建器。

    @NonNull MyFactory.Builder factory;
    
    @Inject
    public MyController(@NonNull MyFactory.Builder factory) {
       this.factory = factory;
    }
    
    public void aMethod() {
       // build method can return a new component/graph
       MyClassA  aClass = factory.build().getA(); 
    }
    

    你的模块看起来像

    @Module
    public MyFactoryModule() {
    
       @Provides
       MyFactory.Builder provideMyFactory() {
          return DaggerMyFactory.builder();
       }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-27
      • 2014-08-06
      • 1970-01-01
      • 2015-03-24
      • 1970-01-01
      • 2023-04-08
      相关资源
      最近更新 更多