提高代码质量
1一些经验
1.1单词
- 有含义的名字:少用temp it do 等
- 组件:匈牙利命名,btnCheck btnSayHello
- 多次使用某个值就应该使用变量
- 不要使用天上掉下来的常量:用final enum来定义常量
1.2语句
- 赋值语句:括号
- 分支语句:括号
- 循环语句:变量局部化
- 保卫语句:写成独立的if return,不要与逻辑的if else交织
1.3函数:写简单函数
- 降低大括号层次:try-catch,lambda等
- 语句不要太多
- 层次不要太多
- 无法简单化:改变算法
1.4对象
- 功能独立:高内聚、低耦合;不要有太多成员
- 处理好对象之间关系:继承与实现;成员;设计模式
1.5定律
- 简单程序
- 代码不要写两遍:
1.6重构:调整使更合理更具可读性
- 一本好书:重构改变既有代码的设计
- JUnit:重构后立即测试
2设计模式:一套可以反复使用的代码设计经验的总结,具备适应性
2.1分类
创建
- 单例:构造使private的
- 工场模式:
- 抽象工厂:
结构型
- 适配器模式:
- 组合型:
- 装饰器模式:
行为型
- 观察者:
2.2设计模式原则
- 单一职责:仅有一个引起它变化的原因
- 开放封闭:不要修改原有的,尽量扩充现有的功能
- 替换原则:子类必须能够替换基类
- 依赖倒置:依赖抽象,面向接口编程
- 接口隔离:类之间的依赖建立在最小接口上
设计原则
1 消除代码复制
提取相似的代码成函数的能力
2 封装
耦合越低越好,类最好能够独立使用而不依赖其他具体类的成员
成员变量private,自己的事情自己做,对外只提供public函数
3 可扩展性
可以扩展的成员==>使用容器
4 框架加数据
函数的扩展性,handler类及其子类,控制器控制进入不同的逻辑
map记录<指令string,handler实例>
抽象与接口
1 抽象
abstract的父类,定义提供的功能public abstract函数
子类实现(覆盖)父类函数
2 数据与表现分离
MVC模型:便于扩展和维护,类的定义:功能单一职责
M:存储数据
V:显示界面
C:控制逻辑
3 面向接口
逻辑上的关系:继承,是的关系
功能上的关系:接口,有这种功能的关系
先设计接口,在实现不同的类:便于分工合作,代码臃肿
控制反转
1 意义:依赖自定义的监听器来控制原有的组件
2 按钮例子
MVC模式
1 课表例子
M与V独立维护,V依赖M的接口来访问M
C与M交互,控制M变化
C与V间不直接联系
3反射:对象能够知道自己是什么类
3.1Class对象:保存具体类的信息
1. 类名.class
2. 对象.getClass
3. Class.forName("quanming")
3.2使用信息
1. .getName():
2. .getPackage():
3. .getDeclaredFields():
4. .getDeclaredMethods():
5. ....
3.3动态创建对象:框架类程序,servlet的基本原理
1. a=(myClass)Class.forName("").newInstance();
3.4Annotation:注解,供编译器使用
自定义注解:
//注解名字
@interface DebugTime{
//属性名字,带括号的形式
boolean value() default true;
long timeout() default 100;
}
使用注解
@注解名(属性=值,属性={值,值})
函数
//使用反射创建注解实例来操作类实例