我正在尝试执行GoF适配器模式,并且在C#示例中,我遵循Adapter类继承原始类和适配接口。 在Delphi(2007)中,据我所知,这是不可能的,或者是这样吗?如果一个类继承了一个接口,它需要从TInterfacedObject继承,因为Delphi不允许多个类继承,这就是故事的结尾。我无法同时从自定义类和接口继承。
我说错了吗?
谢谢。
上实施此模式答案 0 :(得分:14)
不,这不正确。您可以将接口添加到您喜欢的任何类中,如下所示:
type
IAdapter = interface
procedure DoSomething;
end;
TAdapter = class(TBaseClass, IInterface, IAdapter)
private
FRefCount: Integer;
procedure DoSomething;
protected
function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
function _AddRef: Integer; stdcall;
function _Release: Integer; stdcall;
end;
function TAdapter.QueryInterface(const IID: TGUID; out Obj): HResult;
begin
if GetInterface(IID, Obj) then
Result := 0
else
Result := E_NOINTERFACE;
end;
function TAdapter._AddRef: Integer;
begin
Result := InterlockedIncrement(FRefCount);
end;
function TAdapter._Release: Integer;
begin
Result := InterlockedDecrement(FRefCount);
if Result = 0 then
Destroy;
end;
procedure TAdapter.DoSomething;
begin
end;