[关闭]
@Beeder 2017-07-06T10:09:33.000000Z 字数 2177 阅读 631

Android源码设计模式 学习笔记(一) 面向对象六大原则

android


---

第一章 面向对象六大原则

1.1 单一职责原则(SRP)

    单一职责原则(Single Responsibility Principle, SRP):一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。

问题由来:类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。


1.2 开闭原则(OCP)

    开闭原则(Open-Closed Principle, OCP):软件中的对象(类、模块、函数等)应该对于扩展是开放的,但是对于修改是封闭的。

当软件需要变化时,我们应该尽量通过扩展的方式实现变化,而不是通过修改原有的代码来实现。因为直接的修改,可能会影响已有的正常代码。不利于出现错误时排除问题。当然实际开发中,修改原有代码与扩展代码是同时存在的。但应尽量以扩展为主。


1.3 里氏替换原则(LSP)

    里氏代换原则(Liskov Substitution Principle, LSP):所有引用基类(父类)的地方必须能透明地使用其子类的对象。

里氏代换原则是实现开闭原则的重要方式之一,由于使用基类对象的地方都可以使用子类对象,因此在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象来替换父类对象。

里氏替换原则通俗的来讲就是:子类可以扩展父类的功能,但不能改变父类原有的功能。它包含以下4层含义:


在使用里氏代换原则时需要注意如下几个问题:

里氏替换原则就是依赖于面向对象语言的继承与多态。核心原理是抽象。
继承的优缺点:

链接:设计模式六大原则:里氏替换原则


1.4 依赖倒置原则(DIP)

    依赖倒转原则(Dependency Inversion  Principle, DIP):抽象不应该依赖于细节,细节应当依赖于抽象。换言之,要针对接口编程,而不是针对实现编程。

如果说开闭原则是面向对象设计的目标的话,那么依赖倒转原则就是面向对象设计的主要实现机制之一,它是系统抽象化的具体实现。

依赖倒转原则要求我们在程序代码中传递参数时或在关联关系中,尽量引用层次高的抽象层类,即使用接口和抽象类进行变量类型声明、参数类型声明、方法返回类型声明,以及数据类型的转换等,而不要用具体类来做这些事情。为了确保该原则的应用,一个具体类应当只实现接口或抽象类中声明过的方法,而不要给出多余的方法,否则将无法调用到在子类中增加的新方法。

几个关键点:

解释:在Java中,抽象就是指接口或者抽象类,两者都是不能直接被实例化的;细节就是实现类,实现接口或者继承抽象类而产生的就是细节,也就是可以加上一个关键字new产生的对象。高层模块就是调用端,底层模块就是具体实现类。

1.5 接口隔离原则(ISP)

    接口隔离原则(Interface  Segregation Principle, ISP),类间的依赖关系应该建立在最小的接口上,将庞大、臃肿的接口拆分成更小的、更具体的接口。目的是系统的解耦,从而更容易重构、更改和重新部署。

1.6 迪米特原则(LOD)

    (Law of  Demeter, LoD)一个类应该对自己需要耦合或者调用的类知道的最少,类的内部如何实现与调用者或者依赖者没有关系,调用者或依赖者只需知道他需要的方法,其他可以一概不管。这样使得系统具有更低的耦合与更好的可扩展性

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注