В случае, если вы публикуете, я тоже предпочитаю комментарии (имя интерфейса, как его называет NGLN), но я хотел бы объяснить, почему ключевое слово реализует может быть лучшим решением в некоторых других случаях, просто не в тривиальных случаях, когда есть только один метод для интерфейса, как в вашем тривиальном примере.
Я знаю, что вы сказали, что знаете об инструментах; но для людей, которые приходят вместе и не видели этого, я бы хотел документировать, когда это ПОЛЕЗНО, терпите меня. В некоторых случаях даже стоит потратить всю дополнительную работу на то, чтобы иметь больше классов.
Таким образом, я бы использовал инструменты не как ярлык (как вы видите, он длиннее!), А только тогда, когда каждый интерфейс включает в себя 100 методов, которые должны быть реализованы, и где полученный дизайн имеет меньшую связь, а также лучшую согласованность и удобочитаемость. *
Так что это, по общему признанию, глупый пример, но если бы у каждого из IFirst и ISecond было по 100 методов, то это могло бы стать большим скачком вперед ...
type
IFirst = interface
function GetStuff: Integer;
end;
ISecond = interface
function GetOtherStuff: Integer;
end;
TFirstLogic = class(TInterfacedObject, IFirst)
function GetStuff: Integer;
end;
TSecondLogic = class(TInterfacedObject, ISecond)
function GetOtherStuff: Integer;
end;
TFirstSecond = class(TInterfacedObject, IFirst, ISecond)
private
FFirst:TFirstLogic;
FSecond:TSecondLogic;
protected
property First:TFirstLogic read FFirst implements IFirst;
property Second:TSecondLogic read FSecond implements ISecond;
public
constructor Create; // don't forget to create and free FFirst/FSecond.
destructor Destroy; override; // don't forget to create and free FFirst/FSecond.
end;
Можно сказать, что Implements - это единственный способ, которым мы могли бы создавать «частичные классы», или, по крайней мере, создать один составной класс, который реализует группу интерфейсов и имеет несколько под-свойств (которые защищены или, возможно, даже закрыты). используется для выполнения "реализует" делегирование. Если вы переместите все остальное прямо из модуля, который содержит класс агрегирования, у вас может получиться действительно чистый дизайн.