第二周学习总结
5大设计原则
5个设计原则,包括,单一职责、开闭、里式替换、接口隔离以及依赖反转,简称SOLID。
1.单一职责原则
单一职责原则(SRP) single Responsibility Principle:一个类或者模块只完成一个职责或者功能。不同理解的解读:
把模块看着比类更加抽象的概念,类也可以看成模块
把模块看作比类更加粗粒度的代码块,模块中包含多个类,多个类组成一个模块
一个类只负责完成一个职责或者功能,不要设计大而全的类,要设计粒度小、功能单一个类。单一职责的目的:实现高内聚、低耦合,提供代码的复用性、可读性、可维护性。而实际上:要根据应用场景去设计单一职责类,不要过度设计,先设计粗粒度类,再进行持续重构。
类中代码行数、函数、属性过多,影响代码的可读性和可维护性
类依赖的其他类过多,或者依赖类的其他类的过多,不符合高内聚、低耦合的设计思想
私有方法过多
比较难给类起一个合适的名字,很难用一个业务名词概况
类中的大量方法都是集中操作类中的某一个属性
2.开闭原则
开闭原则(OCP) open Closed Principle 。 软件实体(模块、类、方法等)应该对扩展开放、对修改关闭(重要)
解读:添加一个新的功能应该是 在应有代码的基础上扩展代码(新增模块、类、方法),而非修改已有的代码(修改模块、类、方法)。核心代码、复杂逻辑代码满足开闭原则,不是杜绝修改。
思想:要具备扩展、抽象、封装思想。
写出”对扩展开放、对修改关闭“的代码的关键:预留扩展点。对扩展开发是为了 应对变化的需求,对修改关闭是为了保证已有代码的稳定性。最终结果是让系统更有弹性。
3.里式替换原则
里式替换原则(LSP) Liskov Substitution Principe :子类对象能够替换父类对象出现的任何地方,并且保证原来的逻辑行为不变,以及正确性不被破坏
和多态的区别:多态,子类可以修改原有的逻辑,但是里式替换不可以
里式替换可以落地的描述:Design By Contract 按照协议来设计
那些代码违背LSP?
子类违背父类声明要实现的功能
子类违背父类对输出、输入、异常的约定
子类违背父类注释中所罗列的任何特殊说明
里式替换就是子类完美继承父类的设计初衷,并做代码增强。
4.接口隔离原则
接口隔离原则(ISP) Interface Segregation Principe 客户端不应该被强迫依赖它不需要的接口。
5.依赖反转原则
依赖反转原则(DIP) Dependency Inversion Principe 高层模块不要依赖低层模块。 高低模块应该抽象来互相依赖,抽象不要依赖具体实现细节,具体实现细节依赖抽象。
IOC 控制反转 这里的控制 是指对程序执行的流程的控制, 反转是指控制转给了框架。是一种设计思想
DI 依赖注入 Dependency Injection ,不通过new 的方式在内部创建,而是外部创建好,再通过构造函数或者函数参数的方式注入。是一种编码技巧
版权声明: 本文为 InfoQ 作者【张健】的原创文章。
原文链接:【http://xie.infoq.cn/article/fd3c5dc85dfae07d1dd99d13b】。文章转载请联系作者。
评论