银行业务调度系统

一、学习心得:

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

第二点,要设计这个银行业务系统,就要将这个银行的业务搞明白,细节之处不能忽视,比如这几个问题的解决,这么多业务窗口,怎么知道谁是客户,该叫哪一个号呢?明明是有三种不同类型的客户,普通客户、快速客户、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接口的类,一定程度上实现了泛型函数.

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

  1. 黑马程序员Java零基础视频教程_下部(P52-P134)

    黑马程序员Java零基础视频教程_下部(P52-P134) 1. 异常 1.1 异常体系介绍 1.2 编译时异常和运行时异常 1.3 异常在代码中的两个作用 1.4 JVM虚拟机默认处理异常的方式 1 ...

  2. 黑马程序员Java零基础视频教程_下部(P135-P200)

    黑马程序员Java零基础视频教程_下部(P135-P200) 1 多线程 1.1 什么是多线程? 1.2 多线程的并发与并行 1.3 多线程的实现方式 1.3.1 继承Thread类的方式进行实现 1 ...

  3. 黑马程序员Java零基础视频教程_上部(P1-P80)

    黑马程序员Java零基础视频教程_上部(P1-P80) 1. Java入门 1.1 Java学习介绍 1.2 Java人机交互 1.2.1 常用CMD命令 2. Java基础学习 2.1 Java入门 ...

  4. 2023年黑马程序员Java学习路线图

    2023年Java学科免费学习资源放送40+套课程,超过600小时的内容! 在过去的一年里,为了帮助更多人线上充电,学会更多技能,黑马程序员举办了 150+ 场免费直播公开课,新增精品视频教程 80+ ...

  5. 黑马程序员 JAVA WEB 第三节 MYSQL 约束

    这是阿锃总结的第三节黑马程序员JAVA WEB视频的MYSQL约束部分的笔记.希望可以帮助跟我一样正在学习Java web的同学们.我们一起进步.   b_d 若果有同学也想学习黑马程序员Java w ...

  6. 黑马 程序员——Java基础---流程控制

    黑马程序员--Java基础---流程控制 ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------ 一.概述 Java提供了两种基本的流程控制结构:分支结构 ...

  7. 黑马 程序员——Java基础---IO(下)

    黑马程序员--Java基础---IO(下) ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------ 一.概述 Java除了基本的字节流.字符流之外,还提供 ...

  8. 黑马程序员——Java字符流、字节流IO流

    黑马程序员--Java字符流.字节流Io流 ---------------------- <a href="http://www.itheima.com"target=&qu ...

  9. 黑马程序员Java教程学习笔记(五)

    学习视频:https://www.bilibili.com/video/BV1Cv411372m 如侵权,请私信联系本人删除 文章目录 黑马程序员Java教程学习笔记(五) 日期时间:Date.Sim ...

最新文章

  1. flowable工作流_【程序源代码】Springboot开源工作流开发框架
  2. python 特性和方法同名_Python语言特性的梳理
  3. 轻松进行iPad Safari设置
  4. 已知数据信息为 16位,最少应附加( )位校验位,以实现海明码纠错。
  5. 虚拟机测试必备虚拟机之VirtualBox 使用
  6. Android四级缓存,RecyclerView的四级缓存-初探
  7. 常用Flex IOC框架比较分析【转载】
  8. (转)CentOS 和 Ubuntu 下的网络配置
  9. php编程 之php基础 表单
  10. 查看SQLSERVER内部数据页面的小插件Internals Viewer
  11. 408考研复试之计算机组成原理笔记第一二三章
  12. Yandex安装第三方crx插件的方法
  13. 电源 PFC(功率因数校正)电路拓扑,共计100多份,内含A PFC,连续断续,交错,维也纳,各功率段的PFC电路,还有电感 设计选型
  14. 【iOS】越狱入门梳理
  15. java自我介绍_口语化java自我介绍
  16. 转发 :QQ游戏百万人同时在线服务器架构实现
  17. 知云文献翻译打不开_科研星火 | 基础技能——翻译篇
  18. nginx【nginx跨域、nginx开启gizp压缩、nginx服务器部署项目】
  19. ssm基于微信小程序的电影影评交流平台系统 uni-app
  20. eureka + kafka +zookeeper

热门文章

  1. UGA内存泄露问题 ORA-600 [729] Space Leak Errors [ID 403584.1]
  2. Spark调优、DataFrame API使用、大表Join、动态分区
  3. ros中的map_server package分析
  4. 东北大学OJ-1229: 实验4-1 :华氏摄氏温度转换(顺序结构)
  5. 台湾精锐APEX行星减速机行业应用案例
  6. 机器视觉检测技术在汽车行业中的应用
  7. Python 搭建云服务和小程序“云办公”
  8. 图形验证码实现和判断并点击验证码切换
  9. java中遍历数组_java循环取数组值
  10. pdf解析,获取字段数据