黑马程序员_交通灯管理系统、银行业务调度系统及自己总结的

                ----------- android培训java培训、java学习型技术博客、期待与您交流! ------------       

交通灯管理系统

面向对象的分析与设计:
一:每条路线上都会出现多辆车,路线上要随机增加新的车,在灯绿期间还要每秒钟减少一辆车。
  1.设计一个Road类来表示路线,每个Road对象代表一条路线,总共有12条路线,即系统中总共要产生12个Road 实例对象。
  2.每条路线上随机增加新的车辆,增加到一个集合中保存。
  3.每条路线每隔一秒都会检查控制本路线的灯是否为绿,是则将本路线保存车的集合中的第一辆车移除,即表示车穿过了路口。
二:每条路线每隔一秒都会检查控制本路线的灯是否为绿,一个灯由绿变红时,应该将下一个方向的灯变绿。
  1.设计一个Lamp类来表示一个交通灯,每个交通灯都维护一个状态:亮(绿)或不亮(红),每个交通灯要有 变亮和变黑的方法,并且能返回自己的亮黑状态。
  2.总共有12条路线,所以,系统中总共要产生12个交通灯。右拐弯的路线本来不受灯的控制,但是为了让程序采用统一的处理方式,故假设出有四个右拐弯的灯,只是这些灯       为常亮状态,即永远不变黑。
  3.除了右拐弯方向的其他8条路线的灯,它们是两两成对的,可以归为4组,所以,在编程处理时,只要从这4组中各取出一个灯,对这4个灯依次轮询变亮,与这4个灯方向对        应的灯则随之一同变化,因此Lamp类中要有一个变量来记住自己相反方向的灯,在一个Lamp对象的变亮和变黑方法中,将对应方向的灯也变亮和变黑。每个灯变黑时,都        伴随者下一个灯的变亮,Lamp类中还用一个变量来记住自己的下一个灯。
  4.无论在程序的什么地方去获得某个方向的灯时,每次获得的都是同一个实例对象,所以Lamp类改用枚举来做显然具有很大的方便性,永远都只有代表12个方向的灯的实例        对象。
  5.设计一个LampController类,它定时让当前的绿灯变红。   


    银行业务调度系统
面向对象的分析与设计:
一:有三种对应类型的客户:VIP客户,普通客户,快速客户 ,异步随机生成各种类型的客户,各类型客户在其对应窗口按顺序依次办理业务。
  1.首先,经常在银行办理业务的人更有利于理解本系统,例如,我经常陪老婆跑银行,对银行的这个业务算是比较熟悉了,我知道每一个客户其实就是由银行的一个取号机器        产生号码的方式来表示的。所以,我想到要有一个号码管理器对象,让这个对象不断地产生号码,就等于随机生成了客户。
  2.由于有三类客户,每类客户的号码编排都是完全独立的,所以,我想到本系统一共要产生三个号码管理器对象,各自管理一类用户的排队号码。这三个号码管理器对象统一        由一个号码机器进行管理,这个号码机器在整个系统中始终只能有一个,所以,它要被设计成单例。
二:各类型客户在其对应窗口按顺序依次办理业务 ,准确地说,应该是窗口依次叫号。
  1.各个窗口怎么知道该叫哪一个号了呢?它一定是问的相应的号码管理器,即服务窗口每次找号码管理器获取当前要被服务的号码。
  2.如果我不是多次亲身经历银行的这种业务,再加之积累了大量面向对象的应用开发经验,我也不知道能否轻松进行这种设计,能否发掘出其中隐含的对象信息,我真说不出        具体的经验是什么,就是日积月累出来的一种感觉。难道这就是传说中的:“只可意会,不可言传?”

总结:面向对象的使用是根据,谁持有数据那么它就应该提供操作数据的方法。在进行银行业务模拟中,操作对象分装为三大类。NumberManger用来控制号码的生成以及获               取,如同取号机。使用NumberMachine类封装三类客户信息,分别是普通客户,快速客户和vip客户。并且提供三类客户的获取方法。由于要有4个普通客 户窗口以及分             别一个快速窗口和vip窗口。在main方法中创建相应个数的客户窗口数并且使用线程监听。 


面试题一:人在黑板上画圆
 要点:1.person,blackboard,circle
       2.draw(){
         x,y---->radius
       } 


面试题二:两块石头磨成一把石刀,石刀可以砍树,砍成木材,木材可以做成椅子 
 要点:1. StoneKnife=KnifeFactory.CreateKnife(stone)
       2.stone
       3.stoneKnife
       4.tree
       5.chair=chairFactory.makeChair(material)

       6.chair   


自己总结的       
  1.能直接操作字符文件,必须读取相应的字节数,然后去查表,找到一个中文,字符流的好处是可以直接返回一个字符  ,但FiliReader将字符编码写死了,只能用默认的GBK       编码,而FileReader的父类 InputStreamReader(转换流)则可以任意指定编码格式
  2.在System类内有改变输入输出设备的方法,
     setin():重新分配标准输入流
     setout():重新分配标准输出流
  3.对于输入流、输出流的层次  
     不涉及到转换流,则最多三层
         BufferedWriter bufw=new BufferedWriter(new FileWriter("buf.txt"));
         BufferedReader bufw=new BufferedReader(new FileReader("buf.txt"));
     如没涉及到转换流,则最多可达四层
     eg:InputStream in=System.in;  
         BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));            
         BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(System.out));             
         BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d.txt")));
  4.log4j:一款方便java日志文件的建立工具
  5,其实,虚拟机每次在运行的时候,都要先获取系统的信息,只不过我们没将它打印到控制台而已,用
     以下方法可以获取:
     import java.util.*;
     import java.io.*;
     class SystemInfo 
     {
      public static void main(String[] args) throws IOException 
       {
          Properties prop=System.getProperties();
          //System.out.println(prop);
         //prop.list(System.out);  //更简单的打印方式
           prop.list(new  PrintStream("sysinfo.txt")); 
       }
     } 
  6.用流操作文件时,必须先判断文件是否存在,把文件封装成对象,可以对其进行判断和操作,这就是封装文件的好处
  7.运用Rename()改名方法,将一个已经存在的文件通过指定别的路径,可实现类似剪切文件的作用
   eg:
   File f1=new File("SystemInfo.java");
   File f2=new File("c:\\haha.java");
   sop("rename:"+f2.renameTo(f1));
  8.目前能使用的配置文件,有键值对的,XML,和框架
  9.记事本中一小格即代表一个字节=8 bit(位)
 10.如果文件出现乱码,说明编码和解码采用的编码标准不一致
 11.服务器里用的是iso8859-1,能自动识别老美和欧洲的,但不能识别中文

 12.遇到乱码的问题,可以尝试先用原来的编码方式编一次,在用客户端做的软件语言所采取的编码方式解码一 次

 13.UTF-8编码表里有自己的标示头,可以根据给定的字节码的标示头决定连续读两个还是三个字节utf-8的特征是:用一个字节编码的,标示头为0开始;用两个字节编码的,字       节1:标示头以110开始字节2:标示头以10开始;用三个字节编码的,字节1:标示头以1110开始,字节2:标示头以10开始,字节3:标示头以10开始.

 14.两台机要实现通信,最起码的一点是IP协议要相同。
 15.我们ip所在的网段中有两个ip地址不能用,192.168.1.0与192.168.1.255,原因是:前者代表网络段,后者  代表这个网络段中的广播地址,对该网段的接收端中的所有ip地        址发送信息
 16.判断程序那里出错,执行到了哪里,可以用一条System.out.println();语句,通过放在代码不同的地方来检 验
 17.telnet是windows中提供的一个远程登录工具,他可以在dos命令行下,连接到网络中的任何一台主机,进行 配置
 18.number下有八大类型。及基本数据类型
 18.浏览器的强大就强大在里面内置了许多解析的引擎,如javascript、html、css等等
 19.上网默认走的都是80端口
 20.socket走的是传输层协议,即TCP协议,而URL是走的应用层协议,及http协议。浏览器与服务器在进行信息交换时,经过了将信息装包、拆包的过程。实际上在传输层有很       多信息头的信息,用户没看见,是因为解析掉了。
 21.采用抽象方法定义某个方法可将大量的if else语句转移成一个个独立的类
 22.注意:包名中不能含有java的特殊符号,否则,编译器会报找不到main方法类的错误。
 23.基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也表示 为Class对象。 
 24.java中String不是基本数据类型,而是一个类
 25.public static void main(String[]args):main方法的参数列表为一个字符串型的数组,通过指定的agrs[数值]来决定执行那个类。
 26.HashCode()的作用:防止内存泄露
 27.其实包下面也可以建子包的,每建立一个子包,就增加了一层文件夹
 28.给某个文件中的属性添加get和set方法,点击鼠标右键,选择生成getter和setter方法,指定变量即可
      用get或set的方法取变量名即运用了JavaBean的方法
 29.有包名的类不能调用无包名的类
 29.面向对象的方法就是将切面方法封装成一个各个对象,再将对象做为调用这些封装的切面代码的方法的参数  
      传进去
 30.面向对象设计把握一个重要的经验:谁拥有数据,谁就对外提供操作这些数据的方法。 
 31.内部类要加载外部类中的局部变量,则局部变量必须加final

 32.静态成员在被调用时要加下划线。

 33.面向对象的设计对象,有点像力学中的被作用的对象,即受力方 


-----------------------  android培训 java培训 、java学习型技术博客、期待与您交流! ----------------------





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值