黑马程序员Java培训、Android培训_银行业务调度系统笔记

 

银行业务调度系统

一、学习心得:

第一点,和交通灯系统一样,银行业务调度系统也必须用面相对象的思想来设计,不然会很繁琐。所以,必须在平时的学习中重视面向对象设计的练习和掌握。

第二点,要设计这个银行业务系统,就要将这个银行的业务搞明白,细节之处不能忽视,比如这几个问题的解决,这么多业务窗口,怎么知道谁是客户,该叫哪一个号呢?明明是有三种不同类型的客户,普通客户、快速客户、VIP客户,肯定是按三种不同类型排号的,但银行明明没有过那么多的排号机器啊,号码机器是不是应该只有一个啊?不细心观察银行的业务,是不会注意到这些的,就像之前的交通灯系统设计中一样,如果不是老师提醒,我还真没注意:红灯之后立刻就是绿灯,而不经过黄灯这个过程的。所以分析问题得仔细,平时就该养成对待事物多观察多思考的习惯。

第三点,要简化无关项,集中问题落脚点。至于什么的客户才算普通客户,什么样的客户算快速客户?我们没必要深究,只要知道客户在号码管理机器上选择了相应的操作信息 后,我们就知道他是什么样的客户了。

二、银行业务调度系统分析及设计过程:

这个系统最终要达到的工作过程是这样的:客户来了之后,通过号码机器选择号码,与此同时,业务窗口要循环向号码机器要号码,当客户选择一个号码后,业务窗口就可以从号码机器中读取到一个号码,然后通知这个客户到窗口办理业务。业务窗口收到一个号码并成功接收一个客户到他的窗口办理业务时,就停止向号码机器要号码。再来客户时,号码机器就把号码分配给别的业务窗口。在程序的相应地方,要根据业务的不同,打印显示一下业务和客户信息,以便验证程序的正确性。

       从这个过程中,不难分析出,有三个模块需要设计。产生号码的模块、分配管理号码的模块和业务窗口的模块,在理解和分析过程中,可以用画图的方式来分析,这样清楚明白,方便理解:  

    

在实际写代码过程中,以下几点要注意掌握和理解:

1、 自己要熟练掌握好单例的设计:

自行提供这一个实例并向整个系统提供这个实例

模式一:饿汉式单例:

private numberMachine(){}

public static NuberMachine getInstance(){

       return instance;

}

private static NumberMachine instance = new NumberMachine();

模式二:懒汉式单例

public class numberMachine() {

  private static NumberMachine instance = null;

  public static synchronized NumberMachine getInstance() {

  if (instance==null)

    instance=new NumberMachine ();

return instance;   

}

}

2、Executors类启动管理线程:

1 public static ExecutorService newCachedThreadPool()

创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将它们重用。

2 public static ExecutorService newFixedThreadPool(int nThreads)

  创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。

3 public static ExecutorService newSingleThreadExecutor()

  创建一个使用单个线程的 Executor,以无界队列方式来运行该线程。

  这三个方法都可以配合接口ThreadFactory的实例一起使用。并且返回一个ExecutorService接口的实例。

4接口 ThreadFactory

  根据需要创建新线程的对象。使用线程工厂就无需再手工编写对 new Thread 的调用了,从而允许应用程序使用特殊的线程子类、属性等等。

  此接口最简单的实现就是:

class SimpleThreadFactory implements ThreadFactory {

  public Thread newThread(Runnable r) { return new Thread(r); }

  }

5. 接口ExecutorService该接口提供了管理终止的方法。

3、if else和Switch语句效率比较:

如果要深入验证比较两者的效率,个人现阶段掌握的知识不够,通过网友的邮箱例子比较分析,得到以下结论(来着互联网):

(1)switch的效率一般比if-else高 ;switch 效率高,  从汇编代码可以看出来switch 只计算一次值,然后都是test , jmp,  if...else  是每个条件都要计算一遍的;

       (2) switch的效率与分支数无关 ;

(3) 当只有分支比较少的时候,if效率比switch高(因为switch有跳转表),分支比较多,switch效率要高。

4、使用List比使用ArraList好处多:

private List<Integer> queueNumber = new ArrayList <Integer>();

一般情况下,如果没有必要,推荐代码只同List,Map接口打交道。

这样做的原因是list就相当于是一个泛型的实现,如果想改变list的类型,只需要: List list = new LinkedList();//LinkedList也是List的实现类,也是ArrayList的兄弟类。

这样,就不需要修改其它代码,这就是接口编程的优雅之处.

另外,如果在类的方法中声明:private void queueNumber (List list){}

这个方法就能能处理所有实现了List接口的类,一定程度上实现了泛型函数.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值