LAB3作为四个软构实验中最难的一个,涉及到了程序的复用性与可维护性,通过ADT及泛型等抽象技术,开发一套可复用ADT并实现五个具体应用中的其中三种(除必选的航班外选择了高铁与课程表),主要使用了如下软件构造技术
1. 面向可复用性和可维护性的设计:PlanningEntry<R>
1.1找到共性操作
所有的子类型应用都具有启动、取消、完成、获取当前状态功能
1.2个性化子类型设计
采用decorator设计模式,这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。就增加功能来说,装饰器模式相比生成子类更为灵活,但是缺点是文件量与类的数量将会大幅增加。
在该LAB中,通过在planningentry中只实现最基本的功能,其他功能通过装饰的形式动态拓展具体类的功能,如高铁计划项使用
这四种进行拓展
2.面向复用的设计
2.1
R(资源)、timeslot(时间)、location(地点)较为简单,只需要有getter方法
2.2 对于EntryState(状态)来说较为复杂 使用state设计模式,使用getinstance获取当前状态,changestate改变状态
3.设计模式应用
1.Facade设计模式:通过一个统一的高层接口封装api,用来访问子系统中的接口
2.静态Factory模式:通过使用静态工厂,在调用类的对象时不需要再使用new来创建新对象,而是直接以该方式获取实例
3.策略模式:创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。这样在使用时可以根据实际情况进行替换
4.开发应用
调用写好的ADT来进行APP开发,主体方法与成员变量都可以从ADT中获取,在编写每级选择菜单时要注意是否能够处理错误输入,是否能够返回上一级菜单等细节内容
三个应用本质类似,修改少数细节即可完成复用
对于航班则要新增功能“根据正则表达式读入数据”
在读取了文件并转为字符串后,通过对应的正则表达式进行判断,看是否满足各项要求
在对三个应用进行新改动时,如果程序复用性足够好,理论上代价应该都比较小,仅需修改少量代码就可以完成改动