单一职责、开闭原则、里氏替换原则、接口隔离原则、依赖反转原则
单一职责
一个类或模块只负责完成一个职责或功能
但在实际开发中,不同的应用场景、不同阶段的需求背景下,对同一个类的职责是否单一的判断往往不同,所以可以不必过度设计,可以先写一个粗粒度的类,满足业务需求,随着业务的发展,如果粗粒度的类越来越庞大代码越来越多,这个时候就可以将这个粗粒度的类拆分成更细粒度的类,即所谓的持续重构??
对扩展开放、修改关闭
在23种经典设计模式中,大部分设计模式都是为了解决代码的扩展性问题存在的。
添加一个新的功能应该是,在已有代码基础上扩展代码即新增,而非修改已有代码
里氏替换原则与多态的区别
里氏替换:子类对象能够替换程序中父类对象出现的任何地方,并且保证原来程序的逻辑行为不变及正确性不被破坏。
- 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法
- 子类中可以增加自己特有的方法
- 当子类的方法重载父类的方法时,方法的前置条件(方法的输入、入参)要比父类的入参更宽松
- 当子类的方法实现父类的方法时(重写、重载、实现抽象方法),方法的后置条件(输出、返回值)要比父类更严格或相等
里氏替换原则主要阐述了有关继承的一些原则,也就是什么时候应该使用继承,什么时候不应该使用继承,它反映了基类与子类之间的关系,是对开闭原则的补充。可以理解为是指导继承关系中子类如何设计的一个原则
接口隔离原则
如果部分接口只被部分调用者使用,那就需要将这部分接口隔离出来,单独给对应的调用者使用,而不是强迫其他调用者也依赖这部分不会被调用的接口
控制反转、依赖反转、依赖注入 三者的区别和联系
- 控制反转:通过框架实现控制反转,框架提供一个可扩展的代码骨架,用来组装对象、管理整个执行流程,在利用框架进行开发的时候,只需要往预留的扩展点上,添加代码,利用框架驱动程序流程的执行。控制反转不是一种具体的实现技巧,而是一个设计思想,用来指导框架层面的设计。
- 依赖注入:这是一种具体的编码技巧。不通过new()的方式在类内部创建依赖类对象,而是将依赖的类对象在外部创建好之后,通过构造函数、函数参数等方式传递或注入给类使用
- 依赖注入框架:基于依赖注入,通过依赖注入框架提供的扩展点,简单配置所有需要创建的类对象、类与类之间的依赖关系,就可以实现由框架来自动创建对象,管理对象的生命周期,依赖注入等原本需要程序员来做的事情。
依赖反转原则
高层模块不依赖低层模块,高层模块和底层模块应该通过抽象来互相依赖。除此之外,抽象不要依赖具体实现细节,具体实现细节依赖抽象。
所谓高层模块和低层模块,在调用链上,高层属于调用者,被调用者属于低层
KISS原则 、YAGNI原则、DRY原则
keep it simple and stupid 尽量保持简单
you ain’t gonna need it 你不会需要它 :不要去射界当前用不到的功能
dont repeat yourself 不要写重复代码
迪米特法则 实现高内聚低耦合
最小知识原则:不该有直接依赖关系的类之间不要有依赖,有依赖关系的类之间尽量只依赖必要的接口
高内聚:指相近的功能应放到同一个类中,不相近的功能不要放到同一个类中,相近的功能往往会被同时修改,放到同一类中修改会比较集中。
低耦合:指在代码中,类与类之间的依赖关系见到那清晰,即便两个类有依赖关系,一个类的代码改动也不会或者很少导致依赖类的代码活动