加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 实现多个接口的类中的清晰度(替代委托):

发布时间:2020-12-15 09:44:52 所属栏目:大数据 来源:网络整理
导读:假设我们有以下内容: IFirst = Interface(IUnknown) function GetStuff: Integer;end;ISecond = Interface(IUnknown) function GetOtherStuff: Integer;end;TFirstSecond = class(TInterfacedObject,IFirst,ISecond) private function GetStuff: Integer; /
假设我们有以下内容:

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是我们可以做“部分类”的唯一方法,或者至少创建一个实现一堆接口的复合类,并且有一堆子属性(受保护甚至私有)用来做“工具”代表团.如果您将其他所有内容移出包含聚合类的单元,那么您可以拥有一个非常干净的设计.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读