java 学习银行调度学习笔记

来源:互联网 发布:如何分析大数据 编辑:程序博客网 时间:2024/05/17 09:04

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

看了张老师讲的系统后,我觉得我的眼界增长了很多。和交通灯系统一样,它也实现了一个单例。看来单例真的很重要。在银行调度系统中,含有3个应用逻辑类,2个辅助类,一个测试类。在NumberManager类中我们模拟的是产生号码。在NumberMachine中,我们模拟的是银行那个管理号码的机器,里面有3个NumberManager,分别是CommonManger,ExpressManger和VIPmanger.在ServiceWindow中我们模拟的是银行窗口的服务过程,快速和vip窗口空闲时作为普通窗口提供服务。Constans和CustomerType是两个辅助类,一个用来存储变量,一个重写了toString方法,使之返回中文更加贴近我们的生活习惯。

//号码产生类,用一个集合的add()和remove()方法来模拟取号,add()对应的是顾客取号,remove()对应的是银行工作人员需要服务的号码。

//在这个类中还用到了1.5的新特性自动打包功能。因为这顾客取号和工作人员得到号的过程是平行的,所以我们得用加锁来控制不让两个线程

 

1:同一个资源(比如变量)就会引起冲突,而线程同步synchronized恰当的解决了这个问题

public class numbermanager {
    private int lastnumber = 0;
    private list queuenumbers = new arraylist();
   
    public synchronized integer generatenewnumber(){
        queuenumbers.add(++lastnumber);
        return lastnumber;
    }
   
    public synchronized integer fetchnumber(){
        if(queuenumbers.size()>0){
            return (integer)queuenumbers.remove(0);
        }else{
            return null;
        }
    }
}

(自己没注意,看视频是猛然发现的,自己的敏感度不高)

2:要注意极限值:
在数组或者是反省集合中容易犯的错
public synchronized integer fetchnumber(){
        if(queuenumbers.size()>0){
            return (integer)queuenumbers.remove(0);
        }else{
            return null;
        }
    }
在没有判读size的情况下就容易数组越界异常

要享受自己编写代码是的感觉,要欣赏自己编写的代码,若果自己就瞧不起,就是难办了
编程要敏感度:

3:画图分析法:

  画图分析该系统的对象关系
(在交通灯管理系统中张孝祥老师也提到过画图的好处)

4:单实例的创建
public class numbermachine {
   
    private numbermanager commonmanager = new numbermanager();
    private numbermanager expressmanager = new numbermanager();
    private numbermanager vipmanager = new numbermanager();
    public numbermanager getcommonmanager() {
        return commonmanager;
    }
    public numbermanager getexpressmanager() {
        return expressmanager;
    }
    public numbermanager getvipmanager() {
        return vipmanager;
    }
   

        private numbermachine(){}

    private static numbermachine instance = new numbermachine();
    public static numbermachine getinstance(){
        return instance;
    }
}

 

0 0