APP下载

基于面向对象设计模式的仓储系统设计与实现

2018-10-25周昱晨罗向阳张豪

计算机时代 2018年9期
关键词:设计模式

周昱晨 罗向阳 张豪

摘 要: 针对杂志库存管理问题,基于面向对象思想,运用设计模式设计了一个库存管理系统。通过问题域部件设计,将系统划分为人员管理、物资管理和收益管理三部分,并设计了相关表单;通过任务管理部件设计,运用单例模式实现了并发审核,运用观察者模式保证了数据查询的准确和实时,运用状态模式实现了库存的调取,运用装饰器模式实现了收益统计,运用策略模式评估了来年印数与保留库存数;通过数据管理部件和人机交互部件设计,运用抽象工厂结合简单工厂的模式实现了多数据源访问支持;最后设计了用例进行测试。测试结果表明,该系统可以满足杂志库存管理的使用需求。

关键词: 面向对象设计; 问题域部件; 任务管理部件; 数据管理部件; 人机交互部件; 设计模式

中图分类号:TP311.5 文献标志码:A 文章编号:1006-8228(2018)09-33-04

Abstract: Aiming at the problem of inventory control of magazine, the object-oriented design pattern was used to design the inventory management system. In the design process of the problem domain components, the system was divided into 3 parts: personnel management, material management and earnings management, and business related forms were designed. In the design process of task management components, the singleton pattern was used to realize concurrent audit, the observer pattern was used to guarantee the accuracy and real-time of data query, the state pattern was used to realize inventory control, the decorator pattern was used to statistics of revenue and expenditure, the strategy pattern was used to evaluate the number of next year's printing and storage quantity. And in the design process of data management components and human interaction components, the abstract factory was used with the combination of the simple factory pattern to achieve the multiple data source access support. Finally, the use cases were designed and tested, and the results show that the system meets the needs of inventory management of magazine.

Key words: object-oriented design; problem domain components; task management components; data management components; human interaction components; design pattern

0 引言

仓储管理日益受到重视,当前研究主要着眼两方面:①优化库区、路径等;②根据业务设计优良的仓储管理系统[1]。

仓储管理系统应用广泛。杨春红[2]运用VB语言设计了快消品企业仓储系统,但其对模块的实现叙述简略;朱宇哲[3]等运用SSH框架设计了一个钢厂库存管理系统,通过MVC模型实现了底层数据、中间业务逻辑、前端视图的分离,但一方面作者运用的还是结构化设计思想,另一方面MVC不是一种设计模式,可看作多种模式的组合,虽然在系统层面实现了解耦,但在实现特定功能时解耦不如设计模式彻底。文献[3]代表了当下库存管理系统设计的主流思路,反映出设计思想和实现方法有创新和改进的空间。

面向对象思想使信息模型的表示与客观实体相对应,符合人类的思维习惯,在软件开发中应用广泛。张玮[4]对软件工程中结构化方法与面向对象方法进行了比较,但没有实例验证;冯德虎[5]、徐帆[6]对面向对象分析与设计方法作了综述,但文章偏重概念陈述而没有对他人成果给出归纳,且文中的例子也只说明了对象建模技术(object modeling technology,OMT),不涉及设计模式;张宇等[7]论述了面向对象设计原则与设计模式之间的关系,但也没有用实例验证;周静[8]运用Java实现了抽象工厂,却只给出了代码,实用性不强;雷金勇等[9]举例说明了设计模式在暂态仿真中的应用,但没有明确将面向对象4大部件设计与模式对应起来。

本文结合單位业务需求,运用面向对象思想完成系统开发,并在部件设计过程中引入模式,通过用例来测试系统可行性。

1 面向对象设计原则及模式

1.1 设计原则

面向对象设计遵循开闭原则。以此为基础,又衍生出了6大原则[10]。

⑴ 单一职责:一个类一个功能,提高模块的内聚;

⑵ 迪米特法则:模块间解耦;

⑶ 里氏替换:继承原则,子类无缝代替父类;

⑷ 依赖倒置:①高层不依赖低层;②抽象不依赖实现;

⑸ 接口隔离:单个复杂接口拆分为多个独立接口;

⑹ 合成复用:用组合/聚合实现功能而不用继承。

1.2 设计模式

1.2.1 创建型模式

⑴ 单例(Singleton):全局只要一个实例;

⑵ 原型(Protoype):通过拷贝原型而不实例化创建新对象;

⑶ 工厂(Factory):对象创建可控,隐藏具体类名实现解耦;

⑷ 抽象工厂(Abstract Factory):类根据需要返回不同对象,对象与属性匹配;

⑸ 建造者(Build):生成对象与构造顺序无关,对象实例逻辑在类外。

1.2.2 结构型模式

⑴ 适配器(Adapter):适配不同接口的类,方法各不同;

⑵ 装配器(Dacorator):比继承灵活,可组合形成多种扩展类;

⑶ 代理(Proxy):可用于身份验证;

⑷ 外观(Facade):对模块封装,给子系统接口;

⑸ 桥接(Bridge):抽象与实现分离;

⑹ 享元(Plyweight):相同对象重用,用于共享数据;

⑺ 组合(Composite):整体与部分相同,通过对象访问对象树。

1.2.3 行为型模式

⑴ 策略(Strategy):不同方法在一个类中,可选择;

⑵ 模板(Template):具有相同流程;

⑶ 观察者(Observer):一對多关系,被观察者变化时回调;

⑷ 迭代器(Iterator):内部实现无关的集合遍历,顺序访问集合中各元素;

⑸ 责任链(Chain of Responsibility):多个类处理一个请求,不了解彼此功能,类间唯一联系是互相传递请求,直到其中一个类处理;

⑹ 命令(Commond):特定操作的请求封装到一个对象中,客户端不了解实际执行就产生请求;

⑺ 备忘录(Memento):为对象提供存储和恢复手段;

⑻ 状态(State):对象表示程序状态,通过转换对象状态来转换程序状态。

⑼ 访问者(Visitor):分离对象的数据和行为;

⑽ 解释器(Interpreter):可用于纯文本表达式执行。

2 问题域部件设计

本系统将业务逻辑分为人员管理、库存管理和收益管理三大部分。

人员管理即登记系统的操作员,需要创建:人员表(编号,姓名,手机)。

库存管理主要分为入库管理和出库管理。出库又分为发行和执行订单,故创建:库存表(编号,年份,月份,库存数量);发行表(编号,发行单位,年份,月份,数量);订单表(编号,客户姓名,年份,月份,数量)。

收益管理分为收入管理和支出管理。收入分为订单收入和发行收入,支出分为发行运费和订单运费,故建立:发行运费表(编号,发行单位,年份,月份,运费);订单运费表(编号,客户姓名,年份,月份,运费);订单收益表(编号,客户姓名,年份,月份,金额),发行收益表(编号,发行单位,年份,月份,金额)。

3 任务管理部件设计

3.1 人员管理

系统操作员注册和登录后可使用系统。由于本社人员不多且系统业务流程也不算复杂,为让有人不在岗时流程依然可进行,故操作权限对所有成员放开。

3.2 库存管理

3.2.1 单例模式

从系统业务逻辑可知,由于成员权限相同,需控制并发处理产生的冲突。单例模式全局只要一个实例,成员进入修改界面时生成Singleton类的实例,而Singleton类通过单例模式对生成实例数进行控制,当一个成员在修改库存数时其他成员不能再进行修改。单例模式原理如图1所示。

3.2.2 观察者模式

本文将运用观察者模式,通过引入一个数据库代理作主体目标,系统操作员作为观察者关注主体目标的状态变化。当其中一个操作员查询库存时另一个操作员对库存进行了修改,数据代理就会发出一个状态变化通报给各个观察者,确保实时性。数据库代理不清楚系统有多少观察者,它只在数据变化时通知所有正在查询数据的观察者,同样各个观察者只关注数据而不参与数据改变的细节,可在对象间解耦,使得主体目标和观察者都可自由改变,且因主体不关心观察者,增加了重用性。观察者模式逻辑图如图2所示。

3.2.3 状态模式

通过业务逻辑分析可知,仓库有入库、空闲和出库这三种状态。当空闲时,库存数没有变化,故操作员只查数据不进行修改;进行出入库操作时,要修改库存数。入库只在有新杂志送达后才进行,出库在接到订单或到达发行日时进行。

本文通过状态模式将状态间的转换规则封装到具体的类中,若以后本社的业务发生了变化,要修改转换图的转换规则时,只需更改部分对应类中的状态迁移规则就可以了,提高了代码的可维护性。

状态模式逻辑图如图3所示。

3.3 收益管理

3.3.1 装饰器模式

装饰器主要用来实现功能扩展,即降低了耦合也降低了系统复杂度。收益管理中有发行运费支出,订单运费支出,发行收入和订单收入。进行统计时,在发行运费支出的基础上扩展发行收入可得发行收益,订单收益亦然。装饰器模式逻辑图如图4所示。

3.3.2 策略模式

本社每年底都要清理本年杂志,只保留一定数量作库存,并确定来年印数。本文运用策略模式,将发行数和订单数放在数量类中,将支出数与收入数放在金额类中。运用策略模式调用发行数与收入金额数可知发行数与收益关系,据此可大致估算来年印数,以期不浪费;调用订单数与收入金额数可知订单数与收益关系,以此可估算保留库存数,以期收益最大化。 策略模式逻辑图如图5所示。

4 数据管理部件和人机交互部件设计

数据管理部件负责访问数据库,人机交互部件负客户端展现。为减少需求变化造成系统修改的工作量,本文采用与简单工厂模式相结合的抽象工厂模式,实现只有一个具体工厂类而有多个产品族。当业务逻辑发生变化时,只要修改相应产品类并对具体工厂类做少量的修改即可。由于前端、后台逻辑近似,且JAVA中有特定的接口,限于篇幅图表省略。

5 结束语

本文运用面向对象思想设计了一款杂志仓储管理系统,较文献中主流的结构化设计方法思路上有所创新;在实现功能时运用了设计模式,既实现了解耦又提高了维护性。研究结果表明:该系统可满足单位日常使用需求。

下一步,將进一步完善数据管理部件和人机交互部件,提升系统扩展性。

参考文献(References):

[1] 沈捷.快消品企业仓储管理系统的设计与实施[D].江西财经大学信息管理学院硕士学位论文,2017.

[2] 杨春红.基于VB和Access的仓库管理系统[J].电脑编程技巧与维护,2017.24:57-59

[3] 朱宇哲,李 奇.基于SSH框架的钢厂库存管理系统的分析和设计[J].工业控制计算机,2018.5:131-133

[4] 张 玮.软件工程中结构化方法与面向对象方法的比较研究[J].无线互联科技,2017.21:52-53

[5] 冯德虎.面向对象分析与设计综述[J].技术与市场,2011.18(5):122-122

[6] 徐 帆.面向对象开发方法综述[J].重庆工商大学学报:自然科学版,2002.19(4):87-90

[7] 张宇,庄晋林.面向对象设计原则和设计模式的应用[J].华北水利水电大学学报:自然科学版,2007.28(1):63-65

[8] 周静.JAVA设计模式之工厂方法模式的研究与应用[J].科技信息:科学教研,2007.20:90-91

[9] 雷金勇,李 鹏,于学军,等.面向对象的设计模式在暂态仿真中的应用[J].电力系统及其自动化学报,2012.24(3):35-40

[10] GAMMA E著,李英军译.设计模式:可复用面向对象软件的基础[M].机械工业出版社,2007.

猜你喜欢

设计模式
设计模式识别的特征信息分类研究
“1+1”作业设计模式的实践探索
基于能力目标培养的药学专业课程整体教学设计模式研究
引入线索约束的设计模式变体挖掘研究*
设计模式挖掘的有效性评估策略
智慧图书馆环境下的融贯式服务设计模式研究
三维协同设计模式下的航天项目管理实践与展望
交通机电工程设计模式创新探讨
应用型高校学生程序设计能力培养研究
社会化媒体的共生交互社交设计模式与策略研究