在编程语言中除了各种不同的设计模式外,它们也可以被抽出一些共性
开闭原则:一个软件实体应当对开展开放,对修改关闭(玉帝招安美猴王)
面向对象解释: 不予以更改的是抽象层,但是可以扩展的是实现层
对可变性的封装原则: 找到一个系统的可变因素,将之封装起来
继承应当是看做封装的方法,而不应该被认为是从一般对象方法到特殊对象的生成方法
里氏代换原则: 任何基类可以出现的地方,子类一定可以出现
两个类共同行为抽象到一个c类
B继承A改为聚合B(白马与黑马,正方形与长方形)
依赖倒转原则: 要依赖于抽象,不要依赖于实现
抽象类仅提供一个类型的部分实现,可以同时有抽象方法和具体方法
具体类不是用来继承的
如果两个具体类存在继承关系,要引入第三个类作为他们的共同的接口
抽象类应该拥有尽可能多共同代码
抽象类应当拥有尽可能少的数据
接口隔离原则: 应当为客户端提供尽可能小的单独的接口,而不要提供大的总接口
角色的合理划分
定制服务
接口污染
合成/聚合复用原则: 要尽量使用合成/聚合,而不是继承关系达到复用的目的
合成是值得聚合,聚合是引用的聚合
Is-A 代表一个类是另一个类的一种,Has-A代表一个类是另一个类的角色,而不是另一个类的特殊类(人与角色)
迪米特法则: 一个软件实体应当尽可能少的与其他实体发生相互作用
java接口: 一些方法特征的集合
没有接口会造成硬代码问题直接导致可插入性没有保证
java接口用来声明一个新的类型
单方法接口(如Runnable)
标识接口(serialzable)
常量接口