第二章.给客户所需之物

用例:用例是捕捉新系统或软件变更的潜在需求技术。每个用力提供一个或多个场景(scenario),传达系统如何与终端用户(end user)或其他系统交互以实现特定目标。

什么意思?我也没看懂?

一个用例,三个部分。

1.清楚的价值:

每个用例对于系统都必须有明确的价值(clear value)。加入用例无助于客户实现目标,这个用例便没有什么价值。

2.起点与终点:

每个用例都必须有明确的起点(starting point)和终点(stopping point)。某件事开始此流程,然后要有条件(condition)指明此流程已完成。

3.外部启动者:

每个用例由外部启动者(external initiator)开启。有时启动者是人,有时可能是系统外的任何事物。

看个具体的用例:

上图是一个用例,关于用例的解读:

用例就是完成特定目标的具体步骤。

根据用例写代码:

DogDoor.java:

 1 package com.headfirst.dogdoor;
 2 
 3 public class DogDoor {
 4     private boolean open;
 5     
 6     public DogDoor(){
 7         this.open = false;
 8     }
 9     
10     public void open(){
11         System.out.println("The dog door opens.");
12         open = true;
13     }
14     
15     public void close(){
16         System.out.println("The dog door closes.");
17         open = false;
18     }
19     
20     public boolean isOpen(){//返回门的状态
21         return open;
22     }
23 }

Remote.java:

 1 package com.headfirst.dogdoor;
 2 
 3 import java.util.Timer;
 4 import java.util.TimerTask;
 5 
 6 public class Remote {
 7     
 8     private DogDoor door;
 9     
10     public Remote(DogDoor door){
11         this.door = door;
12     }
13     
14     public void pressButton(){
15         System.out.println("Pressing the remote control button ...");
16         if(door.isOpen()){
17             door.close();
18         }else{
19             door.open();
20         }
21         
22         final Timer timer = new Timer();
23         timer.schedule(new TimerTask(){
24             public void run(){
25                 door.close();
26                 timer.cancel();
27             }
28         }, 5000);
29     }
30 }

DogDoorSimulator.java:

 1 package com.headfirst.dogdoor;
 2 
 3 public class DogDoorSimulator {
 4     public static void main(String[] args){
 5         DogDoor door = new DogDoor();
 6         Remote remote = new Remote(door);
 7         
 8         System.out.println("Fido barks to go outside...");
 9         remote.pressButton();
10         System.out.println("
Fido has gone outside...");
11         System.out.println("
Fido's all done...");
12         
13         try{
14             Thread.currentThread().sleep(10000);//获取当前运行线程对象并让其休眠10s
15         }catch(InterruptedException e){}
16         System.out.println("...but he's stuck outside!");
17         System.out.println("
Fido starts barking...");
18         System.out.println("...so Gina grabs the remote control.");
19         remote.pressButton();
20         System.out.println("
Fido's back inside...");
21     }
22 }

 参考网址:

timer.schedule():http://blog.csdn.net/tiancizhenai/article/details/7050302

TimerTask():http://blog.csdn.net/ahxu/article/details/249610

timer.cancel():http://www.cnblogs.com/lingiu/p/3782813.html

Remote.java 22行:final Timer timer = new Timer();//为什么要有个final:http://blog.csdn.net/fatshaw/article/details/50749136

但是我运行的时候没有final也可以,有知道的朋友可以回复一下,为什么没有final也可以运行吗?

我认为加上final

首先是为了让方法中的局部变量和内部类调用该局部变量保持一致性,

其次内部类中保存了一份该局部变量的copy,当方法中的局部变量销毁后,内部类不会出现问题。

final 关键字的解读:http://www.importnew.com/7553.html

原文地址:https://www.cnblogs.com/lanshanxiao/p/7191748.html