Java开发网 Java开发网
注册 | 登录 | 帮助 | 搜索 | 排行榜 | 发帖统计  

您没有登录

» Java开发网 » Design Pattern & UML  

按打印兼容模式打印这个话题 打印话题    把这个话题寄给朋友 寄给朋友    该主题的所有更新都将Email到你的邮箱 订阅主题
flat modethreaded modego to previous topicgo to next topicgo to back
作者 单一职责原则
fyun





发贴: 1
积分: 0
于 2004-04-23 16:04 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
SRP的描述是:就一个类而言,应该仅有一个引起它变化的原因。

每一个职责都是一个变化的轴线,当需求变化时会反映为类的职责的变化。如果一个类承担的职责多于一个,那么引起它变化的原因就有多个。一个职责的变化甚至可能会削弱或者抑制类完成其他职责的能力,从而导致脆弱的设计。

这就好比生活中一个人身兼数职,而这些事情相互关联不大,甚至有冲突,那他就无法很好的解决这些职责。

什么是职责?那就是“变化的原因”,如果你能够想到多于一个的动机去改变这个类,那么这个类就有多于一个的职责。

比如,对于下面的Modem接口:

interface Moden{
public void dial(String pno);
public void hangup();
public send(char c);
public char recv();
}

大多数情况下我们会认为这个设计非常合理,也符合我们对于Modem的认识,但实际上它承担了两个不同的职责:连接管理和数据通信。如果通信的处理比较复杂并且经常变化,那么我们就应该进行分离。

如果变化总是引起两个或者多个职责同时发生变化,那我们应该怎么处理呢?这时候最好的做法就是将这些职责放到同一个类中。

对于变化的封装,应该遵循以下原则:

1,一个类只能有一个引起它变化的原因
2,一个变化不应该分散在多个类中;

实际上SRP是对象设计最简单,同时也是最难运用的一个原则。Uncle Bob说设计的大部分内容就是发现职责并适当的将其隔离。

在实际的设计中,我们应该要考虑到明显变化的因素,同时也没有必要挖空心思去寻找所有变化。变化只有在实际发生时才具有真正的意义。我们可以按当前的情况完成设计,在变化发生时再考虑改变设计来将变化隔离。





话题树型展开
人气 标题 作者 字数 发贴时间
4915 单一职责原则 fyun 887 2004-04-23 16:04

flat modethreaded modego to previous topicgo to next topicgo to back
  已读帖子
  新的帖子
  被删除的帖子
Jump to the top of page

   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923