开闭原则:
- 一句话解释:对扩展开放,对修改关闭
- 线索:业务需求有变动,应该新开接口实现功能(可以通过继承来复用现有功能),而不应该直接改写原有功能
里示替换原则:
- 一句话解释:衍生类(子类)“尽量”不要重写父类现有功能,是对开闭原则的补充
- 线索: 当调用一个父类(或接口的方法),但它的衍生类却不支持,会增加出错的几率
- 如: 调用 “鸟” 的 飞() 方法,但它的实际对象 “玩具鸟” 却不支持该方法。
- 解决方案: 应该切断它们的继承关系,重新设计它们之间的关系
合成复用原则:
- 原始定义:它要求在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。
- 一句话解释:里氏替换原则定义了我们不该做什么,该原则则对其进行了补充,告诉了我们该优先怎么做
单一职责原则:
- 一句话解释:一个类(或方法)只应做好一件事,不应该承担太多职责
- 线索:该原则很抽象,只能靠开发自己来主观把控,没什么好讨论的
接口隔离原则:
- 原始定义:客户端不应该被迫依赖于它不使用的方法
- 一句话解释:要从调用方角度,为各个类建立调用方需要的专用接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。
- 线索:跟单一职责原则一样,该原则只能靠开发主观把控,没什么好讨论的,任何事物只要复杂到一定程度,它自然会驱动人们去对它进行拆分
迪米特法则:
- 一句话解释:10个人之间相互沟通的成本9(每个人要跟9个人对话);若引入一个中间人,大家通过中间人和其他人沟通的话,每个人的沟通成本就是1(每个人只需要跟中介者传达信息,由中介转发)
- 线索:常用的中介者模式就是典型的迪米特法则的应用。但不应该在系统中滥用中介者,力度还是得靠开发者主观把控。
依赖倒置原则:
- 原始定义:①高层模块不应该依赖低层模块,二者都应该依赖其抽象;②抽象不应该依赖细节;③细节应该依赖抽象。
- 一句话解释:类之间的引用尽量依赖接口,而不要直接依赖具体类。
- 线索:类A->类B->接口C (错),类A->接口C<-类B(对),结合bing搜索Inversion图片来理解