java 学习银行调度学习笔记

本文详细解析了单例模式在银行调度系统中的实现方式,包括号码产生类、银行管理类及服务窗口的模拟。同时强调了并发控制的重要性,并通过画图分析法阐述了系统对象之间的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

------- 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;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值