物流管理系统中模板方法设计模式设计与应用

  • 格式:doc
  • 大小:22.00 KB
  • 文档页数:7

下载文档原格式

  / 7
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

物流管理系统中模板方法设计模式设计与应用

作者:黄秀娟

来源:《软件导刊》2014年第09期

摘要摘要:设计模式使得人们可以更加简捷方便地复用成功的软件设计和体系结构,从而帮助设计者更快更好地完成系统设计。结合常州爱索物流管理系统的设计与开发,在物流管理系统中的订单处理模块应用了模板方法设计模式,解决了物流管理系统开发中代码重复、维护效率低的问题,加快了软件开发速度,降低了开发成本,提高了软件的可维护性,从而提升了经济效益。

关键词关键词:物流管理系统;软件复用;模板方法;设计模式

DOIDOI:10.11907/rjdk.143269

中图分类号:TP319

文献标识码:A 文章编号文章编号:16727800(2014)009009203

作者简介作者简介:黄秀娟(1982-),女,江苏兴化人,硕士,常州刘国钧高等职业技术学校信息工程系讲师,研究方向为设计模式在管理系统开发中的应用。

1 物流管理系统分析

我国经济连续多年的高速增长为现代物流发展创造了良好条件。目前,我国各类物流企业有14万家左右,未来还有更加广阔的发展空间。

物流管理系统从物流行业的实际需求出发,参照先进的物流理念与多家领先的物流公司实际的运营流程开发而成,可记录并统计企业存货的出入库,动态反映存资金的增减变动,将“进、销、存”等企业经营业务有机结合起来,达到数据共享、降低成本、提高效率、改进服务等目的。系统从完善的基础信息设置到货物的托运管理、在线跟踪、信息查询,到最后各种报表的生成,能够使操作人员按照清晰的业务流程进行实际操作,保证物流运作有序而高效地进行。具体功能模块包括:资料管理、采购管理、销售管理、库存管理、系统管理等模块。

随着软件规模的迅速扩大,结构化程序设计方法越来越难以克服软件自身的复杂性障碍,也无法满足用户不断变化的需求。当前,面向对象的软件分析、设计和实现技术能够有效提高软件质量、缩短软件开发周期,加强软件的可靠性、可扩充性、可重用性和可维护性,因而成为软件界研究的热点课题,并且在软件开发应用中发展得越来越成熟。

软件设计模式的提出,是面向对象程序设计演化过程中的一个重要里程碑。设计模式使人们可以更加简单方便地复用成功的软件设计和体系结构,从而帮助设计者更快更好地完成系统设计。

2 系统设计中订单模块处理问题

物流管理系统中订单数据的处理分为主从两个表,所以订单每次添加、修改、删除都要处理通过主键、外部键相关联的这两个表。对于添加操作,操作界面首先要初始化用户输入控件的内容,然后把窗体状态设为添加状态,同时对异常操作进行封装处理。保存添加数据时,首先验证数据的合法性,然后存入数据库,最后更新用户界面,把窗口状态设为不同状态,删除、修改操作也与之类似。每个订单的操作都有相同步骤,但每个步骤的数据处理方式不同。针对该问题,可以定义一个模板,模板中定义好订单每个操作实现的逻辑步骤,不同订单只需实现步骤中要求的内容。

3 模板方法设计模式分析

模板方法(Template Method)模式定义了一个操作中算法的骨架,而将一些步骤的具体实现延迟到子类中。模板方法使派生类可以在不改变一个算法结构的情况下,重新定义该算法某些特定步骤的实现逻辑。

模板方法模式需要开发抽象类和具体子类的设计师之间的协作。一个设计师负责给出一个算法的轮廓和骨架,另一些设计师则负责给出这个算法的各个逻辑步骤。代表这些具体逻辑步骤的方法称为基本方法(Primitive Method)[1],而将这些基本方法汇总起来的方法称作模板方法(Template Method),这个设计模式的名称由此而来。图1为一个示意性的模板方法模式结构图。

图1 模板方法模式结构

抽象模板(TAbstractClass)角色有如下责任:①定义了一个或多个抽象操作,以便让子类实现。这些抽象操作称为基本操作,它们是一个顶级逻辑的组成步骤;②定义并实现了一个模板方法。这个模板方法一般是一个具体方法,它给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应抽象操作中,推迟到子类实现。顶级逻辑也有可能调用一些具体方法。

具体模板(TConcreteClass)角色有如下责任:①实现父类定义的一个或多个抽象方法,它们是一个顶级逻辑的组成步骤;②每一个抽象模板角色可以有任意多个具体模板角色与之对应,而每一个具体模板角色都可以给出这些抽象方法(也就是顶级逻辑的组成步骤)不同实现,从而使得顶级逻辑的实现各不相同。

4 订单模块设计

4.1 订单抽象模板接口设计

可以把订单的所有操作定义在一个基类窗口,这个窗口同时定义了每个操作的步骤顺序。子类只需实现其中特定的顺序操作,即DoAdd与UpdateForm两个过程即可。添加操作具体代码如下:

Procedure btnAddClick(Sender: TObject);

begin

try

DoAdd;

FCurState := FormState_Add;

UpdateForm;

except

on E: Exception do

begin

application.Messagebox(PChar('错误:' + e.Message),'错误',

MB_ICONERROR);

end;

end;

end

4.2 订单具体模板设计

由于模板中把每个具体订单要实现的业务逻辑都定义成纯虚函数[2],而将部分由父类实现、部分由子类实现的功能定义成虚函数[2],所以每个订单可以根据其特定需求改写、重写相应的虚函数。

5 模板模式在订单模块中的应用

5.1 订单模块中相关模板类

5.1.1 模板类TfrmBaseBill

使用订单基础窗口作为模板类,如下图所示,模板类提供了订单的添加、修改、删除、增行、删行等操作。

图2 订单界面

图3 订单类图

5.1.2 具体订单

具体订单会根据模板派生出相应的类,比如物料入库单,代码如下:

TfrmMaterielInBill = class(TfrmBaseBill)[0]

5.2 订单模块中模板模式的应用

由于订单模板已经定义好订单的操作步骤,具体订单只要实现各个逻辑步骤即可。如订单的保存操作代码如下:

procedure TfrmBaseBill.btnSaveClick(Sender: TObject);

begin

try

DoSave;

FCurState := FormState_None;

UpdateForm;

except

on E: Exception do

begin

application.Messagebox(PChar('错误:' + e.Message),'错误',

MB_ICONERROR);

end;

end;