您的位置:首页 > 编程语言 > Delphi

《GOF设计模式》—适配器(ADAPTER)—Delphi源码示例:使用双向适配器提供透明操作

2014-08-03 21:55 741 查看

示例:使用双向适配器提供透明操作
说明:
使用适配器的一个潜在问题是,它们不对所有的客户都透明。被适配的对象不再兼容Adaptee的接口,因此并不是所有Adaptee对象可以被使用的方它都可以被使用。双向适配器提供了这样的透明性。在两个不同的客户需要用不同的方式查看同一个对象时,双向适配器尤其有用。
实现:
考虑一个双向适配器,它将图形编辑框架Unidraw与约束求解工具箱QOCA集成起来。这两个系统都有一些类,这些类显式地表示变量:Unidraw含有类StateVariable,QOCA中含有类ConstraintVariable,如下图所示。



为了使Unidraw与QOCA协同工作,必须首先使类ConstraintVariable与类StateVariable相匹配;而为了将QOCA的求解结果传递给Unidraw,必须使StateVariable与ConstraintVariable相匹配。
这一方案中包含了一个双向适配器ConstraintStateVariable,它是类ConstraintVariable与类StateVariable共同的子类,ConstraintStateVariable使得两个接口互相匹配。在该例中多重继承是一个可行的解决方案,因为被适配类的接口差异较大。双向适配器与这两个被匹配的类都兼容,在这两个系统中它都可以工作。

代码:



unit uAdapter1;

interface

uses

Dialogs;

type

IStateVariable = interface

['{BACF300B-1E14-42A0-8EBC-DD9AA1878E44}']

procedure Show;

end;

IConstraintVariable = interface

['{54997F39-8BF1-47E0-9461-7AEFA8984B1A}']

procedure Display;

end;

TStateVariable = class(TInterfacedObject,IStateVariable)

procedure Show;

end;

TConstraintVariable = class(TInterfacedObject,IConstraintVariable)

procedure Display;

end;

TConstraintStateVariable = class(TInterfacedObject,IStateVariable,IConstraintVariable)

procedure Show;

procedure Display;

end;

implementation

procedure TStateVariable.Show;
begin

ShowMessage('StateVariable');
end;

procedure TConstraintVariable.Display;
begin

ShowMessage('ConstraintVariable');
end;

procedure TConstraintStateVariable.Display;
begin

ShowMessage('ConstraintVariable');
end;

procedure TConstraintStateVariable.Show;
begin

ShowMessage('StateVariable');
end;

end.

procedure TForm1.Button1Click(Sender: TObject);
var

AVariable: TConstraintStateVariable;

AStateVariable:IStateVariable;

AConstraintVariable: IConstraintVariable;
begin

AVariable := TConstraintStateVariable.Create;

//---

AStateVariable := AVariable;

AStateVariable.Show;

//---

AConstraintVariable := AVariable;

AConstraintVariable.Display;
end;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐