您的位置:首页 > 其它

面向对象的设计原则之[Single responsibility principle]

2017-06-24 22:42 260 查看

Single responsibility principle [单一职责原则又称单一功能原则]

面向对象的七种设计原则:

1. Single responsibility principle [单一职责原则又称单一功能原则]

2. OCP:Open Closed Principle [开闭原则]

3. LSP:Liskov Substitution Principle [里氏替换原则]

4. DIP:Dependence Inversion Principle [依赖倒转原则]

5. ISP:Interface Segregation Principle [接口分离原则]

6. CRP:Composite Reuse Principle [合成复用原则]

7. LOD:Law of Demeter [迪米特原则]

我们今天先讨论下这个【单一职责】

单一职责的核心与描述

核心:解耦和增强内聚性(高内聚,低耦合)

描述:类被修改的几率很大,因此应该专注于单一的功能。如果你把多个功能放在同一个类中,功能之间就形成了关联,改变其中一个功能,有可能中止另一个功能,这时就需要新一轮的测试来避免可能出现的问题

理解:

第一: 类专注于单一功能,这个很容易理解,就是一个类就做一件事情,例如: 菜刀类就切菜,别把砍柴啊,铲土啊等等都放进去。

第二: 功能之间形成了关联,改变其中一个功能就有可能影响另外的功能。举个简单的例子:

class caidao {
protected c_name;
protected c_color;
function qiecai($name, $color) {
$this->c_name = $name;
$this->c_color = $color;
echo c_name . ';;;;' . c_color;
}

function kanchai($name, $color) {
$this->c_name = $name;
$this->c_color = $color;
echo c_name . ';;;;' . c_color;
}
// and so on
....
}


后期变更需求: 菜刀的c_name,要修改成cd_name, 那么你就会这么做

class caidao {
protected cd_name;
protected c_color;
function qiecai($name, $color) {
$this->cd_name = $name;
$this->c_color = $color;
echo c_name . ';;;;' . c_color;
}

function kanchai($name, $color) {
$this->c_name = $name;
$this->c_color = $color;
echo c_name . ';;;;' . c_color;
}
// and so on
....
}


这样就解决了,然后你测试qiecai() 这个function 没有问题,OK,上线,然后你就会发现,当执行kanchai()这个function时就会有问题。当然你会说这个是自己马虎,自己测试不够,没有修改到下面这个方法,测试也没有测试到位。但是你想想,如果这个类里代码一多起来,你每次有修改,你是否确定你一定能所有的都检查到?

这只是个简单的例子,当然实际开发中一般都是一些方法之间的相互调用和依赖,然后这个问题就更加会在修改之后爆发。

结论: 所以在设计类的时候,我们就要注意这个单一职责的原则,使得设计的类具有高内聚,这样才能低耦合。

欢迎拍砖。

下期我们继续讨论 原则二: 预留连接位置。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐