类结构模式问题.我应该选择什么?

Par*_*ife 6 class-design

什么是(如果有的话)隐含的假设或限制以及设计的差异如下:

在他的:

class SampleClass1
{
    IWorker workerA;
    IWorker workerB;

    void setWorkerA(IWorker w);
    void setWorkerB(IWorker w);
    WorkResult doWork();
}
Run Code Online (Sandbox Code Playgroud)

B)与此相对:

class SampleClass2
{
    WorkResult doWork(IWorker workerA, IWorker workerB);
}
Run Code Online (Sandbox Code Playgroud)

我知道这取决于具体项目,但如果上面的类是小框架的一部分怎么办?第一个类能够维持状态并更自然地分离步骤但是第二类确保与外部调用者的"实时通信"更自然,因为每次调用doWork()时都传递Worker.

是否有任何建议的用法或通用实践指导上述两种方式之间的选择?谢谢.

scu*_*bbl 6

SampleClass1

  • 我可能需要在doWork之间保持工作人员的状态
  • 我可能需要单独设置Workers的功能.(与1和2一起工作,然后与2和3)
  • 我想维护工作人员,因为可能会在同一个工作人员上多次运行doWork.
  • 我不是实用班.我的一个例子很重要.

SampleClass2

  • 给我两个工人,我会和他们一起工作.
  • 我不在乎他们是谁,我不想维持他们.
  • 保持工人之间的任何配对都是别人的工作.
  • 我可能更像是一个实用工具类.也许我只能是静止的.


Gar*_*our 5

在选项(A)您创建了被称为一个函数对象或仿函数,这是一种设计模式,有据可查.

两个主要优点是:

  • 工人可以在一个地方设置,然后在其他地方使用
  • 对象可以在调用之间保持状态

此外,如果您使用依赖注入框架(Spring,Guice等...),仿函数可以自动初始化并在需要的地方注入.

函数对象广泛用于库,例如C++标准模板库