您的位置:首页 > 编程语言 > Java开发

java面向对象设计原则

2016-03-05 01:07 274 查看
为了方便个人记忆及他人查阅,就把看到的总结下。

以下根据某基础java教程,把字幕和讲解手打出来。所以有些地方不是那么”官方“,希望更容易方便理解。

如觉得字小,请放大网页观看。

(注明出处,就可以转载)
首先列出7个设计原则:

单一职责原则(SRP):它要求每个对象应该只有一种责任;

开闭原则(OCP):设计程序时对功能扩展开放,对修改关闭;

里氏替换原则(LSP):在任何情况下子类替换父类,都不会影响程序的运行;

依赖倒置原则 (DIP):提倡高层不依赖底层,二者都依赖抽象;

接口隔离原则(ISP):把多个功能分开声明,不强迫客户实现不需要的功能;

迪米特原则(LOP):也叫最少知识原则,尽可能的降低访问级别;

组合/聚合复用原则(CARP):尽量不用继承达到复用类的目的;

单一职责原则:

它要求每个对象应该只有一种责任,也就说我们让每个对象或者类只做一件事情,而且能够引起这个类或者对象发生变化的原因应该只有一个。

好处就是高内聚,低耦合。所谓高内聚是指一个类或者模块由相关性很强的代码组成,类或模块很难再拆分,它只负责一块任务。耦合指的是类之间或者模块之间的相互联系,耦合度越高,说明联系越紧密,独立性越差,我们拆分很难。相反的耦合度越低,联系越松散,独立性越好,可重用的可能性越大

所以说按照单一职责原则进行开发 ,可以缩小单个类的规模,降低耦合度,提高类的复用性。如果我们设计程序时让一个类具有多个职责不利用代码复用的。

开闭原则:

只对扩展开放,对修改关闭,这个原则主要是针对以前程序员在设计程序时没有 考虑到程序的功能也许会扩展,也就是在程序开发结束以后客户又提出新的需求的时候,程序员只能在原有的程序文件中修改代码或者添加代码,这样做的结果就是很容易导致原有的程序功能发生改变,甚至出现错误,针对这种情况提出的开闭原则。

好处就是可以使程序有很好的适用性和灵活性,因为增加功能时不需要修改已有代码,所以已有的代码可以在更多的地方使用。要进行扩展也很方便。
稳定性和延续性,因为避免了不必要的修改,代码变得更稳定。可以长久保持代码的可靠性。
可复用性和可维护性,因为代码的稳定,所以更适用复用。进行功能扩展时也不会影响多已有的代码。使得代码维护更容易。

里氏替换原则:

表示在任何父类出现的地方都可以用它的子类来替换,而且不影响功能,它是对开闭原则的扩展。它所表述的就是一个继承体系中的对象应该具有相同的外在特征,里氏替换原则主张我们使用“抽象”和“多态“的设计中的静态结构转变为动态结构。

对象的多态性就是最好的里氏替换原则的例子。

依赖倒置原则:

有些地方也叫控制反转,在结构化程序设计中,高层模块多数要依赖底层模块,这会导致当底层模块发生变化时,高层模块也需要修改。在面向对象的程序设计中,高层模块不应该依赖底层模块,两者都应该依赖其抽象类或者接口。也就说我们在创建类的时候最好都来自于接口或者抽象类。接口负责公共方法的声明,抽象类负责公共方法的实现,与开闭原则有些相似就是都在是增加新功能时不去修改原有的程序,依赖倒置原则为开闭原则提出了具体解决方法,所以在程序设计时面向接口编程。所以底层修改不会影响到高层。

提高高层代码的复用性,降低代码耦合度,提高可读性,可维护性,可扩展性。

接口隔离原则:

使用多个专门的接口比使用单一的总接口好。要求我们将功能拆分开来放在不同的接口中,如果我们将所有的功能放在一个接口中,那么我们实现这个接口的时候是不是就要实现它里面所有的方法,但是我们将功能拆分那就简单多了。我们需要什么功能就实现什么接口。

不强迫新功能实现不需要的方法。

迪米特原则:

指一个对象当对其他对象尽可能少的了解,也尽可能的被更少的对象了解。又叫最少知识原则,通俗点就是不跟陌生人说话。如果两个类不必彼此直接通信,那么这两个类就不应该发生直接的相互作用。当其中一个类需要调用另一个类的某个方法时,我们可以通过中介类实现,

降低类与类之间的耦合

缺点:多度使用:通信效率降低,产生大量中介类

组合/聚合复用原则:

优先使用组合,使系统更灵活,其次才考虑继承,达到复用的目的。 使用继承代码耦合度较高,因此应该考虑使用组合或聚合实现代码的复用,由于组合或聚合可以将已有的对象纳入到新的对象中,使之成为新对象的一部分,因此新的对象可以调用已有对象的功能。

组合复用所需要的依赖较少;组合复用可以在运行时间内动态进行,新对象可以动态的引用与成分对象类型相同的对象。

缺点:使用组合复用建造的系统会有较多的对象需要管理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: