软件构造 可重用/可维护大型系统设计随笔,暨Lab-3 Reusability and Maintainability oriented Software Construction完成心得

系统实现

基础通用系统 Lab3中的CircularOrbit与ConceretCircularOrbit

  1. 用泛型实现,一定要注意哪个字母代表哪个泛型(我就弄反了一次导致了很多神奇的BUG)
  2. 写interface(接口)的时候,最好不要一开始就放很多方法上去,因为你一开始的想法和之后的想法会有不小的差距,当你写具体实现的时候发现需要一个方法,并且这个方法可以是通用的时候再把它加上去
  3. 接口和ADT实现的方法功能划分的太细的话会导致你写了很多很多的方法(比如我的CircularOrbit.java中方法数就超过30个),但其实你会发现大部分都用不了几次,还不如直接将属性什么的数据结构每一个都写一个询问方法(当然要防御性复制之后再传出去),这样方法就会比较简洁,不会乱

具体到情景的系统实现

TrackGame

  • 5个可选系统中最特立独行的一个
  • 首先它是分组的,所以不能仅仅靠一个轨道系统来实现它,而是每个group维护一个CircularOrbit
  • 再则它需要你实现对轨道物体即Athlete的2种排序,在这里要用一个Strategy模式处理

AtomStructure

  • 这个是最简单的了,几乎就是一个基础轨道系统,不需要啥修改
  • 我们可以发现同一轨道上的电子之间没有任何区别,所以可以用一个Fly Weight设计模式——每个轨道上的电子实质上都对应同一个对象,避免产生大量的无用对象

SocialNetworkCircle

  • 比较麻烦的一个(它需要实现人和人之间的关系)
  • 介于中心物体(用户a)继承的是CentralObject接口而轨道物体Friend继承的是PhysicalObject接口,关系就要分为(1)Friend与Friend的Relationship 和 (2)用户与Friend的RelationshipWithCentral
  • 但实际上用户a的属性和Friend的属性并没有什么区别,把他们混为一谈也不失为一种可行的办法
  • 查找逻辑距离的方法只有在这里会被用到,建议用Floyd或者SPFA求最短路来实现,懒得写的话宽搜也马马虎虎可以
  • 将Friend放进轨道的时候就相当于从用户a开始宽搜

GUI

  • 组件用的是JFrame和JPanel
  • 实现的话JFrame分成3部分,每个部分用一个JPanel实现:(1)画轨道系统 (2)画通用功能(增删轨道、增删物体)的几个JButton (3)画具体轨道系统特殊的功能(比如TrackGame的切换组)
  • 布局的话其实选择很多,但我用的都是无布局,自己直接设置各个组件的坐标,因为我感觉方位布局(东南西北中的那个)蠢得很,另一些布局有的时候会把Button放到最靠边的位置上(就是几行几列的那个布局),用起来的话还是无布局最灵活最舒服
  • 刷新界面只用JFrame的repaint()就可以,repaint和其他刷新混用会出现为数不少的神奇BUG,这点坑了我十几个小时
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值