导航

学完模式判若两人——三个原则

Posted on 2010-04-18 12:04  敬云  阅读(331)  评论(2)    收藏  举报

单一职责原则

当你完成一个类时,你不仅为自己的使用提供方便,更是为别人减去了负担。

那么,怎么确保自己的类能够使别人更方便的使用呢。那就是单一职责原则。

单一职责原则含义是,就一个类而言,应该仅有一个引起它变化的原因,也就是说他的功能很单一 。-

我们在做编程时,很自然地会给一个类赋予很多功能,比如,商业算法啊,数据库访问啊,SQL语句啊什么的。

这就意味着,无论任何需求的改变,你都要更改这个类,这会使得维护,复用非常麻烦,并且缺乏灵活性。 

比如手机类,当我们创建一个手机类时,是不是要把摄像,拍照,录音,游戏等功能也加入呢。

现实中确实这么做了,但是在程序中,最好不要这样。

因为摄像有专门的摄像机类完成,录音有专门的录音机类完成。

手机类的这些功能会比那些专业类完成的效果更好吗?-

倒不如将职责分离,当需求一个功能时直接找专业类完成会更直观。

 

开放封闭原则

为了确保在需求更改时,设计的软件也可以有相对简单的修改,

不至于程序大幅度更改,我们需要开放封闭原则。

开放封闭原则的原则是指软件应该可以扩展,但是实体(类、模块、函数等)不可修改。

也就是说,当需求更改时,软件可以很灵活的改变,但是具体类的实体,模块等要保证自己的封闭性。不能随意更改。应该做到多扩展,少修改。

开放封闭原则的目标是面对需求的改变却可以保持相对稳定,从而使得系统可以再第一个版本后不断推出新的版本。

比如上一节提到的完成一个计算器。

实际上,我们开始的功能只有加法运算,但是当我们需要添加减法,除法等运算时是很容易扩展的。

我们只需要完成相关的子类即可,然后在更改Factory,使得软件功能得到扩展,对于其他的模块我们并没有更改。

这就可以认为是一个简单的事例。

 

依赖倒转原则

在如何完成软件设计时,我们常常走错路,因为常规的思路是为了完成功能而完成功能。

这话听着很绕嘴,实际指的是,我们并没有按照一个统一的标准去实现设计。

依赖倒转原则帮我们制定了这样的标准。

依赖倒转原则是指抽象不应该依赖细节,细节应该依赖抽象。

说白了,就是要针对接口编程,不要对实现编程。高层模块不应该依赖底层模块,两个都应该依赖抽象。

举个例子。当我们打开机箱查看硬件时,会发现每一块都是可以插拔的,内存坏了,只需换下内存就行了。

但是问题是,为什么我们新买的内存也能插入很久以前的主板上呢,因为他们在设计接口时通过依赖倒转原则,对接口进行约束。

在硬件厂商完成内存时,需要安装这样的标准,这就使得任何的厂商生产的内存都能适应同一块主板。 

也就是说,当我们为软件升级时,增添新的模块,它需要唯一标准就是完成接口。即细节需要依赖抽象。

在开发软件时,首先完成接口,而不是单纯的为了完成功能而去写代码。

 

最后将这三个原则联系在一起,还是以计算机硬件为例。

我们说主板、cpu、显卡、硬盘等都是独立的,功能都是单一的,这就是我们指得单一职责原则。

显卡不需要当做硬盘使用,cpu也不用单独处理图像。

当电脑蓝屏时我们知道是内存不足了,添加一个内存条,而不用更换主板或者硬盘,这就是开放封闭原则。

对于扩展来说是开放的,内存想换几G就几G,但是对于具体的模块和类等实体是封闭的,内部不能更改。

现在我们自己设计一个cpu,但是要考虑到我们设计的cpu要适应所有的主板,而不能仅仅华硕的主板。

那我们需要有一个标准,这个标准就是依赖倒转原则。

我们只能依赖底层,而不能希望所有接口都满足我们的cpu,这显然是不显示的。