1、单一职责
一个类,一个方法,只负责一件事
2、里氏替换
在任何使用父类的地方,替换为子类对象以后,程序不会出现问题
3、依赖倒置
上层不能依赖于下层,他们都应该依赖于抽象
举例:service通过dao接口+dao工厂来访问下层的dao实现的,在以后扩展dao实现的时候,上层service是不用改动的
4、迪米特法则
- 最少知道原则,一个类,对于另外一个类,应该知道的越少越好(封装)
- 只和朋友通信
- 方法参数
- 方法返回类型
- 方法内,实例化出来的局部变量
- 类中的字段
5、接口隔离
使用多个专门的接口比使用单一的大而全的接口要好
6、开闭原则
对扩展开放,对修改关闭
7、组合优于继承
- 如果父类和子类不是同一个人,慎用继承。因为父类作者不知道子类作者会重写什么方法,子类作者不知道父类作者在未来的版本里,会改写什么方法。
- 如果父类和子类是同一个人,可以用继承
- jdk中stack继承vector是反例
oop三大特征
- 封装
- 对外隐藏复杂的实现,暴露简单的使用方法
- 隔离变化,私有方法
- 保护数据
- 提高代码重用性
- 继承
- 提高代码重用性,如果仅仅是为了重用,可以优先考虑组合。
- 多态的前提
- 多态
- 多态的前提:继承
- 多态的作用:提高代码扩展性(dao,jdbc)
- 多态的体现:向上转型
- 多态的限制:向上转型发生时,子类独有的方法无法使用。