SW-Design:Delphi中的类层次结构适配器(泛型与下行)
我想对以下问题提出一些建议:
假设你想为VCL控件编写适配器.所有适配器应具有相同的基类,但在包装特殊控件方面有所不同(例如,从TEdit获取值与从TSpinEdit获取值不同). 所以第一个想法就是创建一个类层次结构 TAdapter = class end; TEditAdapter = class (TAdapter) end; TSpinEditAdapter = class (TAdapter) end; 现在我想引入一个字段来保存对vcl控件的引用.在我的特殊适配器中,我想 – 当然 – 使用具体的子类.但是Base类还应该包含一个引用(例如,如果我想使用适配器使控件可见). 可能性1(物业存取中的向下): TAdapter = class protected FCtrl : TControl; end; TEditAdapter = class (TAdapter) public property Control : TEdit read GetControl write Setcontrol; end; {...} function TEditAdapter.GetControl : TEdit; begin Result := FCtrl as TEdit; end; 因此,如果我实现一个特定的方法,我使用属性Control,如果我在基类中执行某些操作,则使用protected字段. 可能性2(使用通用基类): TAdapter = class end; TAdapter <T : TControl> = class (TAdapter) protected FCtrl : T; end; TEditAdapter = class (TAdapter <TEdit>) end; 您更喜欢哪种解决方案?还是有第三种解决方案,哪种更好? 亲切的问候, 基督教 解决方法
您不能使用泛型来解决此问题,因为您将处于以下两种情况之一:
>要“适应”的属性或方法(例如,Text属性)在祖先类中定义.在这种情况下,您不需要泛型,因为您可以使用一个适配器作为祖先并解决所有后代的问题. 在我看来,最好的办法是为每个类编写特定的适配器,如第一个选项.您可以使用RTTI技巧使您的第一个选项更容易实现,但我不确定它是否值得. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |