设计模式-职责链的简单应用
2008-04-09 04:08:13来源:互联网 阅读 ()
简单的描述
最近作过的一个信息台的项目里在一个输入框里输入不同的命令,要求在输入命令的过程中动态的提示输入信息,以及执行相关命令。通常的做法是在OnKeyPress和OnChange里添加如下代码.
case
Key of
A:;
B:;
..
else
..
end;
或者
if
length(TEdit(Sender).Text) then
else
if...
在条件分支比较少,或者逻辑简单的时候处理起来比较适用,但如果条件复杂就会使OnKeyPress和OnChange事件里的代码过长,代码变得烦乱,维护起来的难度加大。在这个程序里我使用了职责链模式来解耦,效果不错,结构具有良好的扩充性,达到了期望的目的.
TContext = class(TObject) //维护全局信息
private
...
FInfoStr: TEdit;
public
constructor Create(InfoStr:
TEdit);
property InfoStr: String read GetInfoStr;
end;
TFuncChain = class(TObject) //功能链
private
FHandle: TFuncChain;
protected
FConText: TConText;
FAdoQuery: TAdoQuery;
procedure doExecCmd; virtual;
//这是一个模板方法
public
constructor Create(Handle:
TFuncChain; ConText: TConText;
AdoQ:
TAdoQuery); virtual;
destructor Destroy;
override;
function GetCurWorkNode: TFuncChain;
virtual;
function GetHelpInfo: String;
virtual;
procedure ExecCmd;
end;
其中
constructor TFuncChain.Create(Handle: TFuncChain; ConText:
TConText;
AdoQ: TAdoQuery);
begin
FHandle :=
Handle;
FConText := Context;
FAdoQuery := AdoQ;
end;
function TFuncChain.GetCurWorkNode: TFuncChain;
begin
if FHandle
<> nil then
result :=
FHandle.GetCurWorkNode
else result := nil;
end;
在GetCurWorkNode函数里关注感兴趣的信息,如果是需要的信息则提供及时的帮助和命令解释,否则执行传递到下一个节点。通过GetHelpInfo和ExecCmd完成帮助和命令解释操作。
子类里的GetCurWorkNode函数
if IsNeedInfo(FConText.InfoStr) then result :=
self
else result := Inherited GetCurWorkNode;
在form里的OnCreate组装各个对象
FConText :=
TConText.Create(InfoText);
FCmd1 := TCommand1.Create(nil, FConText,
AdoQ);
FCmd2 := TCommand2.Create(FCmd1, FConText, AdoQ);
FHeadNode := TCommand3.Create(FCmd2, FConText, AdoQ);
在OnChange事件中
Var
WorkNode: TFuncChain;
begin
WorkNode := FHeadNode.GetCurWorkNode;
if WorkNode <> nil
then
btmState.Panels[0].Text :=
WorkNode.GetHelpInfo
else btmState.Panels[0].Text := ';
if
isRunCmd then WorkNode.ExecCmd;
end;
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:如何评价软件的质量
下一篇:商业软件功能需求的量化分析方法
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash