面向对象设计原则
概述
软件的可维护性以及可复用性是两个飞虫重要的用于衡量软件质量的属性
- 软件的可维护性是软件能够被理解、改正、适应以及扩展的难易程度,
- 软件的可复用性指能够被重复使用的难易程度
面向对象设计原则是用于评价一个设计模式的使用效果的重要指标之一。通过在软件开发中适用这些原则可以提高软件的可维护性和可复用性,以便设计出艰巨良好的可维护性和可复用性的软件系统,实现可维护性复用的目标
但在维护过程中,若新增的功能极具个性,且不可复制,独立性差,管理性差,则不建议使用设计模式,当然这种情况相对复杂,需要具体考虑,如在维护过程中,新增了一个需要读取音乐文件的功能,但读取音乐这个功能明显仅限此功能适用,未来也不会增加相似功能,在这种情况下,我们可能会依托设计模式开发,但是读取音乐文件这个功能不会用到设计模式,因为没有人和意义。
常见的7个面向对象设计原则
设计原则名称 | 定义 | 使用频率 |
---|---|---|
单一职责原则 (Single Responsibility Principle ,SRP) | 一个对象应该知包含单一的职责,并且该职责被完整的封装在一个类中 | ※※※※ |
开闭原则 (Open-Closed Principle,OCP) | 软件实体应对扩展开放,对修改关闭 也就是,在设计过程中,应尽可能的横向扩展软件性能,而不是完善纵向的功能 侧面来说,我们在考虑设计时就应将该纵向能力考虑全面,提升时尽量以横向发展作为目标,这样软件更容易维护 | ※※※※※ |
里氏代换原则 (Liskov Substitution Principle,LSP) | 所有引用基类的地方必须能透明地适用其子类对象 其实就是父类引用指向子类对象,这种类型的我在tomcat的源码中多处看到,比如,生命周期控制,启动程序等 | ※※※※※ |
依赖倒转原则 (Dependence Inversion Principle ,DIP) | 高层级模块不应该依赖底层级模块么,他们都应该依赖抽象。抽象不应该依赖于细节,细节应该依赖于抽象。 最简单的例子,spring中 控制层-业务层的沟通方式就是如此 | ※※※※※ |
接口隔离原则 (Interface Segregation Principle,ISP) | 客户端不应该以来哪些不需要的接口 讲真,玩了4年代码,两年源码,没怎么见过这种模式的 | ※※ |
合成复用原则 (Composite Reuse Principle,CRP) | 优先使用对象组合,而不是通过继承来达到复用的目的 | ※※※※ |
迪米特法则 (Law of Demeter,LoD) | 每一个软件单位对其他单位都只有最少的只是,而且局限于哪些与本单位密切相关的软件单位 这个指的是会且仅会,有的人可能会说,我多了解一些不是更好吗,是更好,但是也对应这大量的精力被消耗,开发也好项目也好,都是做且仅做为最好 | ※※※ |