delphi – 实现多个接口的类中的清晰度(替代委托):
假设我们有以下内容:
IFirst = Interface(IUnknown) function GetStuff: Integer; end; ISecond = Interface(IUnknown) function GetOtherStuff: Integer; end; TFirstSecond = class(TInterfacedObject,IFirst,ISecond) private function GetStuff: Integer; //implementation of IFirst function GetOtherStuff: Integer; //implementation of ISecond; end; 我从来不喜欢在TInterfacedObject中似乎没有办法区分哪些方法实现哪些接口.我错过了什么吗?有没有人知道代码的方式结构呢?要指定GetStuff是IFirst和GetOtherStuff的实现是ISecond的实现吗? (‘发表评论’不是我正在寻找的答案……) 我知道我可以使用’implements’指令为每个接口定义TFirstSecond中的属性,并将实现委托给TFirstSecond中包含的实例,从而隔离所有内容.但我想要一条捷径…… 解决方法
在你发布的情况下,我更喜欢评论(接口名称就像NGLN所说的那样),但我想解释为什么implements关键字在其他一些情况下可能是最好的解决方案,而不是在只有一种方法的琐碎情况下每个界面,就像你的琐碎样本一样.
我知道你说你知道器具;但对于那些没有看过它的人来说,我想记录它何时有用,请耐心等待.在某些情况下,拥有更多课程的所有额外工作甚至是值得的. 所以我不会将工具用作快捷方式(因为你看它更长!)但只有当每个接口涉及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,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是我们可以做“部分类”的唯一方法,或者至少创建一个实现一堆接口的复合类,并且有一堆子属性(受保护甚至私有)用来做“工具”代表团.如果您将其他所有内容移出包含聚合类的单元,那么您可以拥有一个非常干净的设计. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |