两个不同的对象以相同的方式实现相同的接口-如何保持DRY

问题描述 投票:0回答:2

我有界面:

保证功能getColor的IColored。

现在我有两个对象:1.法拉利2. RedApple

两者均以相同方式实现此接口/功能。(但不能从同一对象继承-不允许多继承)。

您将如何避免代码重复?

delphi interface dry
2个回答
1
投票

我猜您正在寻找的是对象聚合。

签出TAggregatedObject。这个想法是要有一个实现行为,并作为属性将接口函数委托给它内部对象。


-1
投票

如果我正确理解你的话,你就不能-不完全是。但是您可以通过这种方式关闭:

TYPE
  IColored = INTERFACE('GUID')
               FUNCTION getColor : TColor;
             END;

  TFerrari = CLASS(IColored)
               FUNCTION getColor: TColor;
             END;

  TRedApple = CLASS(IColored)
               FUNCTION getColor: TColor;
             END;

FUNCTION CommonFunction : TColor;
  BEGIN
    // Lots of code that ends with Result:=clRed
  END;

FUNCTION TFerrari.getColor : TColor;
  BEGIN
    Result:=CommonFunction
  END;

FUNCTION TRedApple.getColor : TColor;
  BEGIN
    Result:=CommonFunction
  END;

即将实际的代码委托给对象层次结构之外的函数,以便您可以独立于INTERFACE实现调用它。

这是我所知道的唯一实现您所寻找的内容(最少的代码重复)的方式(严重的底层黑客除外)。

© www.soinside.com 2019 - 2024. All rights reserved.