Android设计模式学习(包含Java设计模式)-面向对象的六大原则-AJDesignMode01

来源:互联网 发布:极乐净土网页js代码 编辑:程序博客网 时间:2024/06/06 10:58

前言:

设计模式相当重要,每一本有关Java的书都说过设计模式对于一个Java程序员的重要性,设计模式关乎到你开发的产品的性能,可优化,可维护等等,最重要的是这是加工资的技术,你很熟练掌握这些设计模式,没有理由工资很差,所以,跟随笔者一起来学习学习Android设计模式(包含Java设计模式)。

0.理解高内聚低耦合的重要性

http://blog.csdn.net/nengyu/article/details/42141635

1.面向对象的六大原则

1.1 优化代码的第一步————单一职责原则

说得明白点就是一个类只负责一个职责,要一心一意。
http://blog.csdn.net/zhengzhb/article/details/7278174/#comments

总结:单一职责所表达出的用意就是“单一”二字。正如上文所说,如何划分一个类,一个函数的职责,每个人都有自己的看法,这需要根据个人经验,具体的业务逻辑而定。但是,它也有一些基本的原则,例如:两个完全不一样的功能就不应该放在一个类中。一个类中应该是一组相关性很高的函数,数组的封装。工程师可以不断地审视自己的代码,根据具体的业务,功能对类进行相应的拆分,这时程序优化代码迈出的第一步。

1.2 让程序更稳定,更灵活————开闭原则

就是对软件中的对象(类,模块,函数等)扩展开放,修改封闭
http://blog.csdn.net/sinat_20645961/article/details/48239347

总结:开闭原则指导我们,当软件发生变化时,应该尽量通过扩展的方式来实现变化,而不是通过修改已有的代码来实现。当我们嗅到原来的代码“腐化气味”时,应该尽早地重构,以便使代码恢复到正常的“进化”过程,而不是通过继承等方式添加新的实现,这会导致类型的膨胀以及历史遗留代码的冗余。我们的开发过程中也没有那么理想化的状况,完全地不用修改原来的代码,因此,在开发过程中需要自己结合具体情况进行考量,是通过修改旧代码还是通过继承使得软件系统更稳定,更灵活,在保证去除“代码腐化”的同时,也保证原有模块的正确性。

1.3 构建扩展性更好的系统————里氏替换原则

所有引用基类的地方必须能透明地使用其子类的对象,这似乎和面向对象的继承和多态有关。
http://blog.csdn.net/hfreeman2008/article/details/52344343

总结:里氏替换原则的核心原理就是抽象,抽象有依赖于继承这个特性,在OOP当中,继承的优缺点都相当明显。

优点有以下几点:
1.代码重用,减少创建类的成本,每个子类都拥有父类对继承开放的方法和属性;
2.子类与父类基本相似,但又与父类有所区别;
3.提高代码的扩展性;

继承的缺点:
1.继承是侵入性的,只要继承就必须拥有父类的所有属性和方法;
2.可能造成子类代码冗余,灵活性降低,因为子类必须拥有父类的属性和方法;

开闭原则和里氏替换原则往往是生死相依,不离不弃的,通过里氏替换原则来达到对扩展开放,对修改关闭的效果。然而这两个原则都同时强调一个OOP的重要特性————抽象,因此,在开发过程中运用抽象是走向代码优化的重要一步。

1.4 让项目拥有变化的能力————依赖倒置原则

依赖倒置原则的几个关键点:
1.高层模块不应该依赖底层模块,两者都应该依赖抽象
2.抽线不应该依赖细节
3.细节应该依赖抽象

在Java语言中,抽象就是指接口和抽象类,两者都是不能直接被实例化的;细节就是实现类,实现接口或继承抽象类而产生的类就是细节,其特点就是,可以直接被实例化,也就是可以加上一个关键字new产生一个对象。高层模块就是调用端,低层模块就是具体实现类。依赖倒置原则qw在Java语言中的表现就是:模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的。这又是一个将理论抽象化的实例,其实一句话就可以概括:面向接口的编程,或者说是面向对象编程,这里的抽象指的是接口或者抽象类。面向接口编程就是面向对象精髓之一,也就是上面两节强调的抽象。如果类与类直接依赖于细节,那么它们之间就有直接的耦合,当具体实现需要变化时,意味着要同时修改依赖者的代码,者限制了系统的可扩展性。

http://blog.csdn.net/hfreeman2008/article/details/52289571

1.5 系统有更高的灵活性————接口隔离原则

类间的依赖关系应该建立在最小的接口上。接口隔离原则非常庞大,臃肿的接口拆分成更小和更具体的接口,这样客户将会只需要知道他们感性却的方法。接口隔离原则的目的就是系统解开耦合,从而容易重构,更改和重新部署。接口原则说白了就是,让客户端依赖的接口尽可能小。
http://blog.csdn.net/hfreeman2008/article/details/52304172

Bob大叔(Robert C Martin)在21世纪早期将单一职责,开闭原则,里氏替换,接口隔离以及依赖倒置(也成为依赖反转)5个原则定义为SOLID原则,最为面向对象编程的5个基本原则。当这些原则被一起应用时,它们使得一个软件系统更清晰,简单,最大程度上地拥抱变化。SOLID被典型地应用在测试驱动开发上,并且是敏捷开发以及自适应软件开发基本原则的重要组成部分。在经过前5个原则的学习之后,我们发现这几个大原则最终可以化为这几个关键字:抽象,单一职责,最小化。那么在实际开发过程中如何权衡,实践这些原则,大家需要在实践中多思考与领悟,正所谓“学而不思则罔,思而不学则殆”,只有不断的学习,实践,思考,才能够在积累的过程中有一个质的飞跃。

1.6 更好的扩展性————迪米特原则

一个对象应该对其他对象又最少的了解。通俗的讲,一个类应该对自己需要耦合或调用的类知道得最少,类的内部如何实现与调用者或者依赖者没关系,调用者或依赖者只需要知道它需要的方法即可,其他的可一概不用管。类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另外一个类的影响也越大。

什么是耦合关系,其实很简单,你可以理解这是一种朋友的关系,比如:组合,聚合,依赖等,这都是朋友关系的一种体现,这是一种对象与对象之间的朋友关系,这就是耦合关系。

怎样理解迪米特原则呢?其实很简单,就是把任务交给朋友,具体这个任务怎么实现,那是朋友的事,跟我没关系,比如:大学宿舍,星期天,大家宿舍里打英雄联盟抽不开身都饿了,打游戏的同学都需要那个不那么忙的同学出去卖饭回来吃,这时只需要这位同学把饭带到宿舍给大家吃即可,而不需要去管这个同学买的什么饭,到哪里买的等等。

http://blog.csdn.net/hfreeman2008/article/details/52335601

在之后的文章会详细讲解每一种设计模式,并从Android角度出发讲解如何在Android中应用这些Java的设计模式,欢迎继续关注。

下篇文章:
应用最广的模式————单例模式
传送门:http://blog.csdn.net/clandellen/article/details/77850219

原创粉丝点击