面向对象设计的几个原则
作者:网络转载 发布时间:[ 2012/7/11 10:28:05 ] 推荐标签:
刚刚把《大话设计模式》看完,在看着本书的时候碰到了些困惑:代码大部分理解,但是在理解设计模式中各个类之间的关系时有点吃力,卡在这里一个多星期都没有进展。还好吉庆师兄提醒我先看设计模式的原则,这才慢慢走过来。在写其它的之前,有必要写一下设计模式的几个原则,这些原则像是几个定义好的“类”,而书上所写的设计模式是这几个“类”的“实现”。
单一职责原则:
定义:一个类,只有一个引起它变化的原因,应该只有一个职责。如果一个类有一个以上的职责,这些职责耦合在了一起,这会导致脆弱的设计。当一个职责发生变化时,可能会影响其它的职责。另外,多个职责耦合在一起,会影响复用性。例如:要实现逻辑和界面的分离。SRP中,把职责定义为“变化的原因”。如果你能想到N个动机去改变一个类,那么这个类具有多于一个的职责。这里说的“变化的原因”,只有实际发生时才有意义。可能预测到会有多个原因引起这个类的变化,但这仅仅是预测,并没有真的发生,这个类仍可看做具有单一职责,不需要分离职责。简而言之,是:让一个类实际变化的原因好只有一个。
开放-封闭原则:
开放封闭原则,是为重要的设计原则,里氏替换原则和合成/聚合复用原则为此原则的实现提供保证。可以通过Template Method模式和Strategy模式进行重构,实现对修改封闭、对扩展开放的设计思路。封装变化,是实现开放封闭原则的重要手段,对于经常发生变化的状态一般将其封装为一个抽象。要拒绝滥用抽象,只将经常变化的部分进行抽象,这种经验可以从设计模式的学习与应用中获得。简而言之,是:对新类的添加开放,对原有类的修改封闭。
里氏代换原则:面向对象设计的基本原则之一,里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤是抽象化。而基类与子类的继承关系是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。在进行设计的时候,我们尽量从抽象类继承,而不是从具体类继承。
依赖倒转原则:
抽象不应该依赖于细节,细节应当依赖于抽象。要针对接口编程,而不是针对实现编程。
迪米特法则:
迪米特法则的初衷在于降低类之间的耦合。由于每个类尽量减少对其他类的依赖,因此,很容易使得系统的功能模块功能独立,相互之间不存在(或很少有)依赖关系。迪米特法则不希望类直接建立直接的接触。如果真的有需要建立联系,也希望能通过它的友元类来转达。因此,应用迪米特法则有可能造成的一个后果是:系统中存在大量的中介类,这些类之所以存在完全是为了传递类之间的相互调用关系——这在一定程度上增加了系统的复杂度。迪米特法则的缺点:应用迪米特法则的一个缺点是:系统中存在大量的中介类,这些类之所以存在完全是为了传递类之间的相互调用关系,这在一定程度上增加了系统的复杂度。
合成/聚合复用原则:
尽量使用合成/聚合,尽量不要使用继承。优先使用对象的合成/聚合有助于保持每个类被封装,并被集中在单个任务上,这样类和类继承层次会保持在较小规模。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11