仓库管理系统作为一款计算机管理系统软件, 主要为企业工厂提供便捷、强大的仓库管理解决方案。广泛适用于:工厂中的材料采购入库、生产发料领料;批发零售公司的商品采购入库、出库记账;办公室物品保管、分发、借出、归还等。系统结构如图1所示。
仓库管理系统中基础资料窗口都有相同的功能, 比如:增加、修改、删除、查询、导出、打印等, 同时界面中要显示基础资料的详细信息。如果每个资料都要创建一个窗体、每个窗体完成一个资料信息的维护工作, 势必程序中会有许多类似重复的代码, 如果资料操作窗口中的功能、控件需要添加修改, 如显示控件由TDBGrid改为TDBGrid EH以实现数据的自动排序, 那所有的资料窗口都要改, 必然会导致系统维护的复杂性和重复性。使用同一个界面窗口, 根据不用资料特点, 使用不同的策略处理相应的数据, 势必会减少软件的维护量, 提高代码效率。
策略模式的用意是针对一组算法, 将每一个算法封装到具有共同接口的独立的类中, 从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。
使用策略模式可以把行为和环境分割开来。环境类负责维持和查询行为类, 各种算法则在具体策略类 (Concrete Strategy) 中提供。由于算法和环境独立开来, 算法的增减、修改都不会影响环境和客户端。当添加一个具体资料时, 只需要实现新的策略类, 并在客户端登记即可。策略模式相当于“可插入式 (Pluggable) 的算法”。
下面是一个示意性的策略模式结构图:
环境 (Context) 角色:持有一个Strategy类的引用。
抽象策略 (IStrategy) 角色:这是一个抽象角色, 通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。
具体策略 (TConcrete Strategy) 角色:包装了相关的算法或行为。
使用场合:
1) 如果在一个系统里面有许多类, 它们之间的区别仅在于它们的行为, 那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。
2) 一个系统需要动态地在几种算法中选择一种。那么这些算法可以包装到一个个的具体算法类里面, 而这些具体算法类都是一个抽象算法类的子类。换言之, 这些具体算法类均有统一的接口, 由于多态性原则, 客户端可以选择使用任何一个具体算法类, 并只持有一个数据类型是抽象算法类的对象。
3) 一个系统的算法使用的数据不可以让客户端知道。策略模式可以避免让客户端涉及到不必要接触到的复杂的和只与算法有关的数据。
4) 如果一个对象有很多的行为, 如果不用恰当的模式, 这些行为就只好使用多重的条件选择语句来实现。此时, 使用策略模式, 把这些行为转移到相应的具体策略类里面, 就可以避免使用难以维护的多重条件选择语句, 并体现面向对象设计的概念。
1) 基础资料抽象策略接口的设计
基础资料的操作主要有:添加、修改、删除等。所以接口可以设计成:
2) 基础资料环境的设计
由于每个基础资料都有相同的操作, 可以定义一个基础窗口, 放置所有的操作, 由其作为Context, 负责调用每个策略的具体行为。
3) 具体资料的设计
每个具体策略只需实现IStrategy接口即可, 如:
1) 基础资料中策略相关类
所有的策略都继承至TBase ADOHandle, TBase ADOHandle的父类TADOHandle只是对数据库操作的一个简单封装。
TADOHandle类图和TBase ADOHandle类图:
基础资料操作的数据都封装在TBase ADOData中。
策略模式中Context由基础窗口类Tfrm Special Form来实现, 基础窗口类持有一个TSpecial Form Handle对象, 而具体的策略就包含TSpecial Form Handle对象中。Tfrm Special Form调用TSpecial Form Handle来实现具体的业务逻辑, 而TSpecial Form Handle只是对策略接口的一个封装。
2) 基础资料中策略模式的应用
用户界面层对基础资料的操作都是通过TSpecial Info Handle类的Info Handle函数实现的, Info Handle根据传入的基础资料类型TSpecial Info Type把相应的策略传给地TSpecial Form Handle。
如图8 TEmployee Handle为员工的处理策略。
当Tfrm Special Form处理具体业务, 只要调用TSpecial Form Handle对应的Do操作即可, 如添加资料时, 实际调用了Special FormHandle.Do Add。
而Special Form Handle.Do Add调用了资料编辑窗口对象, 编辑窗口对象拥有从TSpecial Form Handle传递的类TBase ADOHandle。当数据添加时则调用此TBase ADOHandle对象。
所以从以上流程可以看出, 资料维护中策略模式并不只是单纯Context和Strategy的交互, 还有许多辅助类用来协助业务的处理。这些负责类的加入也是对策略模式应对负责的业务逻辑更加灵活强大。
过去几年中, 面向对象领域取得的最大进展之一就是设计模式概念的提出和不断发展, 设计模式由于其实用性而受到欢迎, 在表达上既简单又清楚而受到越来越多的重视。
本文通过策略模式在仓库管理系统中的设计和应用, 结合本人对众多的仓库管理系统项目的设计、开发、具体的实施过程和管理经验, 在仓库管理系统的基础资料维护设计中应用了策略设计模式, 从而可以解决仓库管理系统中的开发中的一些常见的问题, 对设计类似的仓库管理系统有很强的指导作用, 增强软件设计的可重用性, 提高经济效益。
随着面向对象的仓库管理系统开发的不断完善, 相信还有新的比较实用的设计模式被不断提出, 对提高仓库管理系统的软件可复用性有很大的借鉴意义。寻找新的设计模式, 或者所谓的挖掘, 是模式团体一直在进行的一项活动。所有结构良好的面向对象的软件体系结构中都包含了许多模式, 发掘其中的模式需要开发者有丰富的设计经验, 而识别已有软件中的设计模式将有助于在设计中使用模式和发现模式。虽然现在已经可以为许多领域提供大量在广度和深度上得以抽象的模式, 但挖掘新模式依然是未来的一个重要工作。
标签:
上一篇: 现代化立体仓库的管理
下一篇: 一种简单有效的仓库物料管理操作方案