1.七大设计原则
1.单一职责原则--每个类只负责一件事
2.接口隔离原则
- 客户端不应该依赖他不需要的接口,两个类都实现了一个接口,接口里有五个方法,第一个类需要使用全部的方法,第二个类只需要使用三个方法,这样第二个类就违反了接口隔离原则
- 按照接口隔离原则就应该拆分成两个接口,来处理两个类
3.依赖倒转原则--接口的依赖可以有接口实现,构造器实现,set方法实现
- java的概念:抽象指的是抽象类和接口,细节知道是实现类
- 高层模块不应该依赖于底层模块,两者都应该依赖于其抽象
- 依赖倒转的中序思想就是面向接口编程
违反依赖倒转,每次添加一个新的方法people都要修改相应的参数
4.里氏替换原则--为的是解除父类和子类的耦合
- 子类中尽量不要去重写父类的方法
- 里氏替换原则实际上告诉我们不要去使用继承,可以使用聚合,组合和依赖来解决问题---在原来的子类b中包含私有属性父类a组合达到也能使用原来a类的代码的目的
- 基类随便怎么改动子类都不受此影响,那么基类才能真正被复用
- 子类必须实现父类的抽象方法,但不得重写(覆盖)父类的非抽象(已实现)方法。
- 子类中可以增加自己特有的方法。
- 当子类覆盖或实现父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。
- 当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。
5.开闭原则--是所有其他原则的目的
- 对扩展开放,对修改关闭,用抽象构建框架,用实现扩展细节,当我门增加一个功能的时候是去扩展而不是增加
下面是一个违反开闭原则的例子,在添加了三角形之后,改动了使用方的代码
一下方法是符合开闭原则的
6.迪米特法则--又称最小知道法则
- 一个类对自己依赖的类知道的越少越好,不管类多么复杂,都将逻辑封装在类的内部,只对外提供public方法,不泄露其他任何信息
- 只与直接的朋友通信--在类中的成员属性,方法参数,方法返回值出现的其他类为直接的朋友,陌生的类不要以局部变量的形式出现在类的内部
7.合成复用原则--不使用继承而是合成与聚合
用直接朋友关系替换父子关系
ps:UML类图
Dependency依赖:A用到了B就说A依赖于B
Generalization泛化(继承)
Realization实现,实现式依赖关系的特例
Association关联,是依赖关系的特例
aggregation聚合关系和composite组合关系:表示整体和部分的关系是可以抽离出来的,是关联关系的特例
如果一台电脑有两个属性键盘和鼠标,如果键盘,鼠标和电脑是可以分开的那么他们是聚合的关系,如果是不可分开的那就是组合的关系
区分这两个关系的方法:看是不是会一起死