传智播客-bank-day12

来源:互联网 发布:美萍软件怎么审核 编辑:程序博客网 时间:2024/05/07 11:53

---------------------- android培训java培训、期待与您交流! ----------------------

7k------bank


NumberManager://要有一个号码管理器
1,号码生成器
2,叫号程序


1.号码生成器:
public synchronized int generateNewManager(){ 
//generate-->形成,造成,产生
queueNumber.add(lastNumber);//将生成的号码加入队列中。queue-->队列
return lastNumber++;
}
2.叫号
public synchronized int fetchServiceNumber(){
return queueNumber.remove(0);
}


NumberManager.java
public class NumberManager{
private int lastNumber=1;
private List<Integer> queueNumber=new ArrayList<Integer>();
public synchronized Integer generateNewManager(){ //generate-->形成,造成,产生
queueNumber.add(lastNumber);          
//将生成的号码加入队列中。queue-->队列
return lastNumber++;
}
public synchronized Integer fetchServiceNumber(){
return queueNumber.remove(0);
}
}


导包名:Alt+/


NumberMachine:
//号码生成器:
//号码机会返回三个对象,即commonManager(普通),expressManager(快速),VIPManager(VIP)
public class NumberMachine{
private NumberManager commonManager = new NumberManager();
private NumberManager expressManager = new NumberManager();
private NumberManager vipManager = new NumberManager();


public NumberManager commonManager(){
return commonManager;
}
public NumberManager expressManager(){
return expressManager;
}
public NumberManager vipManager(){
return vipManager;
}
//以上是叫号机产生的三种类型号码


//单例此对象
//构造函数私有化
private NumberMachine(){}
public static NumberMachine getInstance(){
return instance;
}
//new对象
public static NumberMachine instance= new NumberMachine();
}


//顾客类型
customer-->客户
CustomerType:
public enum CustomerType{
COMMON,EXPRESS,VIP;


//为了显示中文,覆盖tostring方法
public String toString(){
switch(this){
case COMMON:
return "普通";
case EXPRESS:
return "普通";
case VIP:
//enum中的一个方法(name())用于返回枚举名称
return name();
}
}
}


6
//服务窗口
ServiceWindow:
public class ServiceWindow{
private CustomerType type=CustomerType.COMMON
private int windowId=1;


//此处提供一个set方法,用于在外部设置用户类型
public void setType(CustomerType type){
this.type=type;
}
//此处提供一个set方法,用于在外部设置窗口Id
public void setWindowId(int windowId){
this.windowId=windowId;
}


public void start(){
//1.5新特性,executors
Executors.newSingleThreadExecutor().execute(new runnable
}
}


系统时间-->System.currentTimeMillis()
eclapsed-->
cast-->


custmoer.java中
????public String toString()方法中的this用其它的行不?如果能改可以改成什么?




8
????//window.start();这里的start()方法,是第7节中ServiceWindow中的一个start方法和线程是不是没有关系。
//在ServiceWindow也没有中我也没有找到extends Thread类,和Interface Runnable接口,但是在start()方法中
//有启动线程池,也有覆盖Run()方法


MainClass.java中
.start中启动线程。
//这里注释下,对1.5的新特性不清楚,在ServiceWindow中的线程池中new了一个runnable对象,并建了内部类。(这里有点乱,之前学的


thread方法:1.extends Thread继承  2.implements Runnable实现接口。这里没继承也没实现,直接new了runnable对象的内部类)


定时器线程:Executors.newScheduledThreadpool(1).scheduleAtFixedRate()
//这里可参见api中的Executors.newScheduledThreadpool(1).scheduleAtFixedRate()方法


思想:
1,主函数中先开启所有窗口(一个窗口一个线程)。用.start()方法。
2,根据需求,有三类客户,所以定义三个定时器(common,express,vip)
   这里定时器的第一个参数依然是new Runnable的匿名内部类。
????为什么调用numberMachine.getinstance().getcommonManager().generateNewManager()
答:这里程序要从叫号开始运行。


---------------------- android培训java培训、期待与您交流! ----------------------

原创粉丝点击