构建器模式是否适用于相同的 representation/output 但过程略有不同?

Is the builder pattern suitable for the same representation/output but a slightly different process?

我的 API 有不同的参数。根据这些,我有两个略有不同的过程。但输出几乎相同。我应该使用构建器模式吗?

例如,假设有不同的查询参数A和B:

// For case A: 
if (A){
  funX(A);
  funY();
  funZ();
}

// For case B :
if(B){
  funW(B);
  funX(B);
  funY();
  funZ();
}

注意:这里的过程有点复杂。如第三方api调用、过滤、排序、复杂计算等

流程略有不同这一简单事实并不能证明也不需要构建器模式。

不幸的是,你的问题没有显示任何关于你的对象结构的信息,所以很难给出如何实现它的建议。通常,这里有一些例子:

  • 多态性:不同的 classes 在其基础 class 中实现承诺的行为略有不同。根据您的参数,您将实例化正确的 class。
  • 模板方法是多态的一种特殊用途,其中流程的核心结构在基础class中实现,并利用辅助功能实施略有不同。
  • 组合:部分行为在不同classes/objecs中实现。这个过程可以通过组合不同的部分来组装。它比继承更灵活。
  • 策略装饰器命令责任链 是所有使用组合(有时与继承相关)的设计模式,可以允许稍微(或根本)不同地实现行为。许多其他方法使用组合来实现您的目标。

无论如何,尽量不要将设计模式用作解决问题的基本成分目录。正确的方法恰恰相反:想想你想如何解决这个问题,如果你发现它们解决了你的一些设计意图,然后使用设计模式。

回到构建器模式:这个模式旨在构建复杂的 classes,并将相同的构建过程应用于遵循相同逻辑的不同 classes他们的建设。我在您的代码示例中没有看到这种挑战。