一. 索引
1. 常用的设计原则和设计模式
<1> 常用的设计原则
软件开发的流程
需求文档分析,概要设计文档,详细设计文档,编码和测试,安装和调试,维护和升级
原则
开闭原则:对扩展开放,对修改关闭
里氏代换原则:任何父类出现的地方,子类一定可以出现
依赖倒转原则:尽量依赖于抽象类/接口,而不是具体实现类
接口隔离原则:尽量将大接口拆分成若干小接口
迪米特(最少知道)法则:一个实体应当少于其他实体发生相互作用(高内聚,低耦合)
合成复用原则:声明一个类类型的引用,作为另外一个类类型的成员变量
设计模式:是代码设计经验的总结
分类
创建型模式
结构性模式
行为型模式
<3> 设计模式详解
一个类对外提供,且只提供一个对象
工厂方法模式
通过工厂类中的方法,实现(大量的)产品(对象)的创建:
建立一个工厂类,并在类中提供一个工厂方法,来生产各种不同的产品
通过参数,传入字符串,来区分不同的产品
多个工厂方法模式:
一个工厂类中,多个工厂方法,各自生产不同的产品
优点:不需要传递字符串,避免了字符串传错时的异常
静态工厂方法模式:
无需创建工厂类的对象,即可调用生产方法
抽象工厂方法模式:
为了避免违背开闭原则,可以使用抽象工厂方法模式
即,每个工厂类,生产一种单独的产品
装饰器模式:
给一个对象动态地增加、撤销功能(不更改被装饰类原有的代码)
代理模式:
在代理类中,直接创建一个被代理类的对象
模板方法模式:
实际上就是抽象类的应用
2. 新特性
<1> Java8 - 函数式接口
一个接口只包含一个抽象方法, 如Runnable, Comparator 等
实现函数式接口的一种方式:
(参数列表) -> {方法体}
<3> Java8新特性 - 方法引用
实现函数式接口的另一种方式:
对象/类名 :: 方法名
简化对集合的操作
创建流 --> 对集合进行中间操作(筛选与切片 / 映射 / 排序) --> 对集合进行终止操作 (匹配与查找 / 规约 / 收集)
等价于:创建集合 --> 调用集合的成员方法
该类的引入能很好地解决空指针异常,不用显式进行空值检测
<6> Java9 新特性
模块化 - module
钻石操作符<>的操作升级
集合工厂方法of(), 用于创建不可变实例
InputStream增加了transferTo()方法,底层是read()和write()
<7> Java10新特性
局部变量类型(var)推断
<8> Java11新特性
简化的编译运行
String类新增方法
3. 在线考试系统(项目)
<1> 概要分析
<2> 服务器:初始化、关闭、测试
<3> 客户端:初始化、关闭、测试
<4> 客户端:主界面的绘制、测试
<5> 客户端:扫描器工具类的封装
<6> 客户端:将管理员相关信息发送到服务器
<8> 服务器:校验管理员的账户和密码
<9> 客户端:接收结果,并打印
4. NIO技术
<1> NIO的概念
<2> NIO - Buffer缓冲区概述 & ByteBuffer的创建方式
<3> NIO - 缓冲区的常用方法 & Buffer类中的变量(一)
<5> NIO - Channel通道概述 & Channel API
<7> NIO - 网络编程收发信息
<10> NIO - 选择键(SelectionKey) & Selector的使用流程
<11> NIO编程实例
二. 编程题
在已有的在线考试系统的基础上,实现学员管理系统的功能:
<1> 当项目启动时:将文件中的所有学员账户信息全部读取出来,放到一个集合List中
<2> 客户端:输入要增加学员的用户名和密码,通过对象输出流,发送给服务器
<3> 服务器:接收客户端发来的消息,判断集合中是否存在该学员账户信息,并实现具体添加功能
<4> 服务器:将增加学员功能的处理结果,发送给客户端; 客户端:给出对应的提示
<5> 当项目退出时:将集合中的所有学员信息,整体写入到文件中
提示:
1. 对象序列化流,在socket发送完成后,注意使用reset()
2. 服务器:要对客户端的请求 & 相应内容进行打印
如:服务端收到客户端的 ”管理员登录“ 请求, 请求数据为 ”XXX“,
调用 ”XXX“方法, 响应结果为 {"result" , "success"}