面向对象设计的几个原则

    刚刚把《大话设计模式》看完,在看着本书的时候碰到了些困惑:代码大部分理解,但是在理解设计模式中各个类之间的关系时有点吃力,卡在这里一个多星期都没有进展。还好吉庆师兄提醒我先看设计模式的原则,这才慢慢走过来。在写其它的之前,有必要写一下设计模式的几个原则,这些原则就像是几个定义好的“类”,而书上所写的设计模式就是这几个“类”的“实现”。

    单一职责原则

    定义:一个类,只有一个引起它变化的原因,应该只有一个职责。如果一个类有一个以上的职责,这些职责就耦合在了一起,这会导致脆弱的设计。当一个职责发生变化时,可能会影响其它的职责。另外,多个职责耦合在一起,会影响复用性。例如:要实现逻辑和界面的分离。SRP中,把职责定义为“变化的原因”。如果你能想到N个动机去改变一个类,那么这个类就具有多于一个的职责。这里说的“变化的原因”,只有实际发生时才有意义。可能预测到会有多个原因引起这个类的变化,但这仅仅是预测,并没有真的发生,这个类仍可看做具有单一职责,不需要分离职责。简而言之,就是:让一个类实际变化的原因最好只有一个。

    开放-封闭原则

    开放封闭原则,是最为重要的设计原则,里氏替换原则和合成/聚合复用原则为此原则的实现提供保证。可以通过Template Method模式和Strategy模式进行重构,实现对修改封闭、对扩展开放的设计思路。封装变化,是实现开放封闭原则的重要手段,对于经常发生变化的状态一般将其封装为一个抽象。要拒绝滥用抽象,只将经常变化的部分进行抽象,这种经验可以从设计模式的学习与应用中获得。简而言之,就是:对新类的添加开放,对原有类的修改封闭。

    里氏代换原则

    面向对象设计的基本原则之一,里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。在进行设计的时候,我们尽量从抽象类继承,而不是从具体类继承。
    依赖倒转原则

    抽象不应该依赖于细节,细节应当依赖于抽象。要针对接口编程,而不是针对实现编程。

    迪米特法则

    迪米特法则的初衷在于降低类之间的耦合。由于每个类尽量减少对其他类的依赖,因此,很容易使得系统的功能模块功能独立,相互之间不存在(或很少有)依赖关系。迪米特法则不希望类直接建立直接的接触。如果真的有需要建立联系,也希望能通过它的友元类来转达。因此,应用迪米特法则有可能造成的一个后果就是:系统中存在大量的中介类,这些类之所以存在完全是为了传递类之间的相互调用关系——这在一定程度上增加了系统的复杂度。迪米特法则的缺点:应用迪米特法则的一个缺点就是:系统中存在大量的中介类,这些类之所以存在完全是为了传递类之间的相互调用关系,这在一定程度上增加了系统的复杂度。

    合成/聚合复用原则

    尽量使用合成/聚合,尽量不要使用继承。优先使用对象的合成/聚合有助于保持每个类被封装,并被集中在单个任务上,这样类和类继承层次会保持在较小规模。

 

 

                                                                                                                                                                   

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值