交通灯系统
1) 面向对象的重要经验:谁拥有数据,谁就提供对外操作数据的方法。
2) Executors类:多线程并发。Executors类的静态方法newSingleThreadExecutor()返回ExecutorService的一个对象,该对象等价于ThreadPool.
如何使用Executors:
1. ExecutorService pool = Executors.newSingleThreadExecutor();
Pool.execute(new Runnable(){
Public void run(){
//Detail code….}
}
execute(command)方法括号中表示的是要执行的任务,可接收一个线程对象,表示执行该线程。
2. ScheduledExecutorService timer=Executors.newScheduledThreadPool(1);//创建一个线程调度池
timer.scheduleAtFixedRate(new Runnable(){},
initialplay,//过多久开始做
period,//再过多久接着做
unit//时间单位(TimeUnit.SECOND)
)
Timer是一个调度控制器。
3) 枚举类有个静态方法valueOf(String s),返回和字符串s一样的枚举对象。如:Lamp.valueOf(“N2S”)返回的就是N2S。
4) Road.this.name:表示内部类用到外部类同名的变量。
5) 交通灯系统小结:在面对一个项目时,需求分析一定得把握准。在此基础上进行面向对象设计和逻辑设计,设计时一定得考虑周全,这样在写代码才会事半功倍。例如:在这个项目中,首先得分析出需要哪些对象,如,灯,道路,灯控制器,然后编写相应的类。再者,根据逻辑,编写出各类之间的相互关系的具体代码。在所有代码都编写完后,才去测试。
6) 银行系统逻辑设计小结:首先创建一个号码管理类(NumberManager),类中有个集合成员变量和号码成员变量,用来管理号码,还有两个方法,创建号码和机器叫号码的方法;然后创建一个号码产生机器类(NumberMachine),将号码管理类对象作为其成员变量,又因为只需要一个机器,所以用单例设计模式来设计这个类。然后,创建一个服务窗口类,可根据客户的类型来决定到底由哪种窗口来为其服务。最后,创建一个测试类,在该类里面利用多线程来模拟不同客户来银行办理业务,然后创建服务窗口类对象,启动多线程窗口服务,测试程序。一句话:异步创建各种客户来银行办理业务à根据客户类型从号码机器中的对应出口获取号码-à服务窗口叫号对客户服务。