面向对象设计的基本原则

本文介绍面向对象设计的SOLID原则,参考《大话设计模式》一书,常用的23种设计模式,可参考链接

单一职责原则

定义:就一个类而言,应该仅有一个引起它变化的原因。

如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其它职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离。

开放-封闭原则

定义:软件实体(类、模块、函数等)应该可以扩展,但是不可修改。

特征:对于扩展开放,对于修改封闭。

无论模块多么封闭,都会存在一些无法对之封闭的变化。既然不可能完全封闭,设计人员必须对于他设计的模块应该对哪种变化封闭做出选择。他必须先猜测出最有可能发生的变化种类,然后构造抽象来隔离那些变化。然而,对于应用程序中的每个部分都刻意地进行抽象同样不是一个好主意,拒绝不成熟的抽象和抽象本身同样重要。

依赖倒转原则

定义:

A: 高层模块不应该依赖低层模块。两个都应该依赖抽象。
B: 抽象不应该依赖细节,细节应该依赖抽象。(针对接口编程,不要对实现编程)

高层模块依赖低层模块:面向过程开发时,为了使得常用代码可以复用,一般会把这些代码写成许多函数的程序库,这样在做新项目时,去调用这些低层的函数就可以了。

依赖倒转可以说是面向对象设计的标志,用哪种语言来编写程序不重要,如果编写时考虑的都是如何针对抽象编程而不是针对细节编程,即程序中所有的依赖关系都是终止于抽象类或者接口,那就是面向对象的设计,反之就是过程化的设计了。

里氏代换原则

定义:在软件里面,把父类都替换成它的子类,程序的行为没有变化,简单的说,子类型必须能够替换掉它们的父类型。

正是因为这个原则,使得继承复用成为可能,只有当子类可以替换掉父类,软件单位的功能不受到影响时,父类才能真正被复用,而子类也能够在父类的基础上增加新的行为。正是由于子类型的可替换性才使得使用父类类型的模块在无需修改的情况下就可以扩展。

接口隔离原则

定义(维基百科):指明客户(client)不应被迫使用对其而言无用的方法或功能。接口隔离原则(ISP)拆分非常庞大臃肿的接口成为更小的和更具体的接口,这样客户将会只需要知道他们感兴趣的方法。这种缩小的接口也被称为角色接口(role interfaces)。

目的:系统解开耦合,从而容易重构,更改和重新部署。接口(interface)提供了便于代码在概念上解释的抽象层,并创建了避免依赖的一个屏障。

posted @ 2021-01-10 09:38  louzi  阅读(78)  评论(0编辑  收藏  举报