1

假设我们有两种服务模式。

ICommonInterface
-action1()

Mode1Service 继承 ICommonInterface
Mode2Service 继承 ICommonInterface

两者都有相似的功能,所以有一个共同的接口(ICommonInterface)。那么为 ICommonInterface 提供实现的最佳方式是什么,是继承还是组合或任何其他方式?

1)如果我们更喜欢组合,这不是纯粹的继承。通用逻辑将作为不同的辅助类。Mode1Service 和 Mode2Service 必须遵守共同契约并调用这些助手来提供实际的实现。
- 助手类不需要单独使用。

2) 通过继承,我们将有一个 AbstractBaseModeService,它继承了由两个模式服务类继承的公共接口。同样,Mode1Service 和 Mode2Service 除了通用接口外,还有自己的接口。

我觉得继承更好,即使它只提供代码可重用性。关于如何处理此类案件的任何想法。

4

2 回答 2

0

第一件事,

  1. 我们应该保持物体干燥(不要重复自己),
  2. 这些实现是否应该遵循共同的合同。

我个人认为我们可以继续使用具有这些通用逻辑的接口和抽象方法,并让实现在需要时做自己的事情。这是默认方式。通过组合一个新对象将其作为辅助类或域对象从抽象类中提取出来也很好。

Saby提供的示例与我将复制的示例相同。

免责声明:(可以考虑)
仅仅因为Mode1ServiceMode2Service有一些共同点,拉出一个公共接口ICommonInterface是不好的,因为接口的出现是为了让服务遵循一些结构。

于 2013-07-30T15:35:51.020 回答
0

我也会喜欢这样的东西:

class CCommonFunctions
{
   public:
    // Some utility Functions
    void set_somefunctions() 
    {
    }
};

class ICommonInterface
{
  public:
    virtual void action() = 0;
  protected:
    CCommonFunctions *p;
};

class Mode1Service: public ICommonInterface
{
   public: 
     void action() 
     {
        p->set_somefunctions();
        ... 
     }
};

class ServiceMaker
{
 public:
   void setService(ICommonInterface *icip)
   {
       m_ici = icip;
   }
   void makeAction()
   {
       m_ici ->action();
       ...
   }  
 private:
   ICommonInterface *m_ici;
};

int main()
{
  ServiceMaker mk;
  ICommonInterface *ici = new Mode1Service;

  mk.setService(ici);
  mk.makeAction();
  ...
  ...
}

请让我知道它是否适合您,我也为此使用了 Builder 模式。

于 2013-07-30T06:52:30.933 回答