【软件构造】Lab3感想心得

lab3代码量是真的大,给了一个月的时间,可是依然用了两天的laterdays

基于语法的图数据输入

利用正则表达式来匹配
TrackGame

  Pattern pattern2=Pattern.compile("Athlete ::= <");
  Pattern pattern3=Pattern.compile("NumOfTracks ::= ");
  for(String each:content) {
   Matcher matcher1= pattern1.matcher(each);
   Matcher matcher2= pattern2.matcher(each);
   Matcher matcher3= pattern3.matcher(each);
   if(matcher1.find()) {
    String m=each.substring(9, 12);
    metres=Integer.valueOf(m).intValue();
   }
   else if(matcher2.find()) {
    Pattern pattern=Pattern.compile("([A-Za-z]+),([1-9][0-9]*),([A-Z]{3}),([1-9]\\d*),([1-9][0-9]?\\.\\d{2})");
    Matcher matcher= pattern.matcher(each);
    if(matcher.find()) {
     String name=matcher.group(1);
     int num=Integer.valueOf(matcher.group(2)).intValue();
     String nation=matcher.group(3);
     int age=Integer.valueOf(matcher.group(4)).intValue();
     double result=Double.parseDouble(matcher.group(5));
     PhysicalObject athlete=createPhysicalObject(name,num,nation,age,result);
     allObjects.add(athlete);
    }
   }
   else if(matcher3.find()) {
    String m=each.substring(16,17);
    tracknums=Integer.valueOf(m).intValue();
   }
  }

AtomStructure

Pattern pattern1=Pattern.compile("(ElementName ::= )([A-Z][a-z]?)");
  Pattern pattern2=Pattern.compile("(NumberOfTracks ::= )([1-9]\\d*)");
  Pattern pattern3=Pattern.compile("NumberOfElectron ::= ");
  for(String each:content) {
   Matcher matcher1= pattern1.matcher(each);
   Matcher matcher2= pattern2.matcher(each);
   Matcher matcher3= pattern3.matcher(each);
   if(matcher1.find()) {
    element=matcher1.group(2);
   }
   else if(matcher2.find()) {
    trackNum=Integer.valueOf(matcher2.group(2)).intValue();
   }
   else if(matcher3.find()) {
    String rest=each.substring(21);
    Pattern pattern=Pattern.compile("(\\d*)\\/(\\d*)");
    Matcher matcher= pattern.matcher(rest);
    while(matcher.find()) {
     for(int i=0;i<Integer.valueOf(matcher.group(2)).intValue();i++) {
      trackElectron.put(Integer.valueOf(matcher.group(1)).intValue(), Integer.valueOf(matcher.group(2)).intValue();

     }
    }
   }
  }

PersonalAppEcosystem

Pattern pattern1=Pattern.compile("(User ::= )([A-Za-z0-9]+)");
  Pattern pattern2=Pattern.compile("(App ::= <)([A-Za-z0-9]+),([A-Za-z0-9]+),([A-Za-z0-9.-_]+),\"([A-Za-z0-9 ]+)\",\"([A-Za-z0-9 ]+)\"");
  Pattern pattern3=Pattern.compile("(InstallLog ::= <)([0-9]{4}-[0-9]{2}-[0-9]{2}),([0-9]{2}:[0-9]{2}:[0-9]{2}),([A-Za-z0-9]+)");  
  Pattern pattern4=Pattern.compile("(UsageLog ::= <)([0-9]{4}-[0-9]{2}-[0-9]{2}),([0-9]{2}:[0-9]{2}:[0-9]{2}),([A-Za-z0-9]+),([1-9][0-9]*)");
  Pattern pattern5=Pattern.compile("(UninstallLog ::= <)([0-9]{4}-[0-9]{2}-[0-9]{2}),([0-9]{2}:[0-9]{2}:[0-9]{2}),([A-Za-z0-9]+)");
  Pattern pattern6=Pattern.compile("(Relation ::= <)([A-Za-z0-9]+),([A-Za-z0-9]+)");
  Pattern pattern7=Pattern.compile("Period ::= ");

图的可视化:第三方 API 的复用

运用 java.awt 和 java.swing 库来从 0 开始画图 public static void visualize(CircularOrbit<CentralObject,PhysicalObject> c) 重写 JPanel 的 paint 方法 graphics.drawOval 画同心圆轨道 graphics.fillOval 画轨道物体 如果轨道物体之间存在联系,graphics.drawLine 画直线将有关系的物体连起来

设计模式应用

  1. Track、PhysicalObject 都是用 factory method 设计模式,新建产品时只需要知道产品的工厂即 可,易于扩展。
  2. ConcreteCircularOrbit 用 abstractfactory 设计模式,工厂为 TrackGame、AtomicStructure 和 PersonalAppEcosystem,PhysicalObject 和 CentralObject 为工厂里的产品, 每个工厂创造自己对应的产品类型
  3. Iterator 设计模式 在 ConcreteCircularOrbit 里,有一个重写迭代器的方法,从内到外遍历 轨道
  4. CircularOrbitAPIs 采用 façade 设计模式,将所有的 API 都放在 CircularOrbitAPIs 中,调 用 CircularOrbitAPIs 来访问其中的 api
  5. TrackGame 使用 strategy 设计模式来实现比赛的编排方案,包含随机编排和按成绩 编排,由相应的策略 new random 或者 score
  6. AtomStructure 使用 memento 设计模式来保存电子跃迁前后的多轨道系统模式,主要是 CareTaker 中用 list 来存储 memento,memento 中包含一个多轨道系统模型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值