我有界面:
保证功能getColor的IColored。
现在我有两个对象:1.法拉利2. RedApple
两者均以相同方式实现此接口/功能。(但不能从同一对象继承-不允许多继承)。
您将如何避免代码重复?
我猜您正在寻找的是对象聚合。
签出TAggregatedObject。这个想法是要有一个实现行为,并作为属性将接口函数委托给它内部对象。
如果我正确理解你的话,你就不能-不完全是。但是您可以通过这种方式关闭:
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实现调用它。
这是我所知道的唯一实现您所寻找的内容(最少的代码重复)的方式(严重的底层黑客除外)。