读书人

OOP设计准则

发布时间: 2012-10-13 11:38:17 作者: rapoo

OOP设计原则

很久没跟新技术博客了,惭愧!

最近做一个关于OOP设计原则的演讲,到处找资料,也顺便把我了解到的跟大家讲一下。

有涉及很多原则,最基本的是叫做“SOLID”的五条原则:


S = 单一职责原则 Single Responsibility PrincipleO = 开放闭合原则 Opened Closed Principle L = Liscov替换原则 Liscov Substitution PrincipleI = 接口隔离原则 Interface Segregation PrincipleD = 依赖倒置原则 Dependency Inversion Principle


单一职责原则:

用图表示就是:OOP设计准则


看懂了吗?英文翻译是:“不是因为你可以做,你就都做。”


让我们回到创世起初,我们看到男人外出打猎野兽,女人在洞穴中看顾孩子。来到古代社会,男耕女织,分工明细,自给自足。回到现代社会,分工趋于明细,专业区分也更加的细致,经济学、会计学、金融学、国际贸易学……

回到OOP设计原则上,类也是如此,应该被划分地更加细致,职责越专一越好,能够引起它变动的因素越少越好。因为这样意味着它可以更加专注于自己的负责的一块,并且不必因为其他类的修改而影响到自身的功能。能够做到功能如上图般丰富的“刀”又有多少?上能掏耳朵,下能剪指甲,饿了还可以削苹果皮!如果可以,我想使用起来也不会很方便!更多的时候,我们需要的是一把只能剪指甲,却很锋利,也很好用的指甲刀,而不是一把样样都能的“全能刀”

因而,我们在设计类的时候也应该注意,不要太想“一口吃成胖子”,要拆分类的功能,做到职责单一。


开放闭合原则:

OOP设计准则

它的意思是:当你需要换一件衣服的时候,没必要打开你的胸膛。

这意味着,你的身体对修改是封闭的(你不能轻易被开膛破肚,否则你就死了),而你的身体对于外部的扩展比如穿衣服,则是开放的(你可以随意地换上合身的衣服)。

对人如此,对类也是这样。

让我们看一张图:OOP设计准则

这就是违背”开放封闭原则“的设计,因为当你改动服务类时,客户端类就很可能也需要被修改,这样做导致了 他们之间的高耦合度。


而这样的设计则是更好的:OOP设计准则

这样子做添加了一个抽象服务类,而在客户端类中包含了一个抽象服务类的引用,具体的服务类实现了抽象服务类。这样,当具体的服务类发生修改时,抽象服务类没有改动,进而包含抽象服务类的引用的客户端类就不用发生改动!

在这里,抽象是关键!如果你抽象的好,很可能在扩展功能的时候,不需要设计其他的类,这就减少了很多的工作,提高了效率!


里氏替换原则:


同样用一张图: OOP设计准则


继续翻译:”如果它看起来像一只鸭子,叫声像鸭子,但是需要电池————你很可能做出了错误的抽象“

此文未完…………

读书人网 >编程

热点推荐