Rocky Yu

寻找属于自己的幸福!~

导航

单一职责原则(Single Responsibility Principle)

Posted on 2009-05-15 14:41  RockyYu  阅读(1199)  评论(0编辑  收藏  举报

所谓单一职责原则,敏捷软件开发中的定义是:就一个类而言,应该仅有一个引起它变化的原因。这里的职责指的就是变化的原因。也就是说一个类中如果它含有2种以上能引起变化的原因,那么它就违反了单一职责原则。

interface IBeMan

{

      public void BeBoyFriend();

      public void BeHusband();

}

如果这个类代表的意义是,“一个男人有可能会成为某人的男朋友(BoyFriend),也有可能成为某人的丈夫(Husband)。”的话。按照通常的世俗观念,人们不允许一个男人既“BeBoyFriend”又“BeHusband”,就算现在的确有这种现象,那是因为他们不是程序员,也没有学过单一职责的原则,这里不再做评。大多数人的做法应该立即将其分离开来,分别生成新的接口IBeforeMarry和IAfterMarry。找准自己的定位和角色。

interface IBeforeMarry

{

      public void BeBoyFriend();

}

interface IAfterMarry

{

      public void BeHusband();

}

这样既符合了世俗的观念又符合了单一职责的原则,何乐而不为呢?!

但是并不是所有的职责都需要进行分离,比如:一个类可能具有了多个职责,但是它本身不可能总变化,那我们就可以不对其进行重构。学习的目的是为了合理运用而不是滥用,所有的方法都提取和分离的方法并不科学,还是要看清本质和具体情况,认为的确有必要再做处理才是该提倡的。

再来个例子:

interface IBeMan()

{

      public void BeSon();

      public void BeFather();

}

每个男人都会有一个身份,那就是儿子(Son),理想状态每个男人也都会成为父亲(Father),这两者并不冲突,而且也应该是每个男人应有的角色,所以没有必要非要将这两个职责分离。

以上例子未必准确,只是为了方便理解。仅此而已。