用于创建对象图的设计模式

时间:2018-01-19 22:16:31

标签: java android design-patterns dagger

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

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

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

但MyController没有理由坚持这些引用。所以代码看起来很混乱,因为看起来MyController不必要地注入这两个参数,即使它不使用它们。

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

1 个答案:

答案 0 :(得分:0)

使用构建器模式。注入一个组件构建器,创建一个可以创建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();
   }
}