如何写好代码
1、问题
- Spring bean 相互依赖 在注入的时候是什么情况
- enum 的使用
- 多余的临时变量 list -> map
- 函数职责
- 代码完成后 应该便于拆分 便于测试
- 把面向对象写成面向过程
- client 应该保持只调用接口 类的细节应该隐藏 方便重构
- 抽象能力
- null 值判定
- 避免打印重复
- 英语表达
- 设计原则
- 单一指责原则
- 开闭原则
- 里氏替换原则
- 接口分离原则
- 依赖倒置原则
- 迪米特法则
- 不要重复
2、设计模式
-
创建型模式:
- 抽象工厂 创建几类家族的实例
- 构建者 把对象的构建和它分开
- 工厂方法 创建一个共通接口的若干子类的实例
- 原型 创建一个被克隆初始化的实例用于复制或者克隆
- 单例 使一个类无论在什么时候访问都可以得到唯一的实例
-
结构性模式:
- 适配器 为多个不同的类之间建立连接的接口
- 桥接 对象有多个属性时把属性之间的关联关系从m * n 改为 m + n
- 组合 创建一个自相似的树形结构的节点
- 装饰 动态的为对象增加责任
- 外观 通过一个接口来隐藏整个子系统
- 享元 用一个共享的实例来加快访问
- 代理 用一个对象来代表另外一个对象
-
行为型模式:
- 职责链 在一个链条间传递任务
- 命令 把命令包装成对象
- 翻译者 在一个语言环境中不同的语言元素表示不同的语义
- 迭代器 循环地访问一个列表中的元素
- 协调者 在对象之间建立一个简化的沟通类
- 备注 存储对象内部的数值
- 观察者 当对象发生变化时通知一组其他对象
- 状态 当对象状态变更时变更处理
- 策略 采取不同的算法进行不同的处理
- 模板方法 把通用的处理放在父类,具体的实现步骤放在子类的实现
- 访问者 不必改变对象定义的情况下定义应用于对象的操作
3、英文表达
- 名词 一般用了表示属性 复数如List
不要用bookList 而应该是 books - 动词 一般用来表示方法 方法名称中一般包含一个动词
- 动名词 可作为属性 也可作为方法 如 action configuration 类或接口出也行 如 Activity{} class Service
- 形容词 应作为属性的某种状态 例如 visible 表示是否可见
- 代词 this java 保留字 what 表示一个可能和自己重名的对象 other 指代比较对象
- 介词、连词等
- by 表示后面条件执行的动作
- for 表示执行前面的动作是为了后面的目的 如 TestEngine.waitForIdle()
- at 表示根据后面的条件执行条件执行前面的动作
- and 表示两个条件都需要成立才够执行前面的动作
- or 表示两个条件只需一个条件成立即可执行前面的动作