zoukankan      html  css  js  c++  java
  • 面向对象:单一任务原则(SRP)

    Robert C. Martin提出的面向对 象的5个原 则 , 这 次介 绍 一下单一 责 任原 则 。 单 一 责 任原 则 (Single Responsibility Principle (SRP)): 类 的 责 任只有一个,修改 类 的理由不能存在多个。

    参考文档(http://www.objectmentor.com/resources/articles/srp.pdf )

     
    遵循SRP单 一 责 任原 则 的 类满 足以下条件: 
      ◇ 只拥 有一个角色( 责 任) 
      ◇ 修改类 的 场 合,修改的理由只有一个 
     
    为 什么要去 类 的 责 任是 单 一的呢? 
    假设 一个 类 有复数个 责 任, 类 修改的 时 候有2个以上的理由。其中某一个机能修改的 时 候很容易影响到其他机能。 软 件的安定性和 维护 便利性很会 较 差。 
    SRP单 一 责 任原 则 中"修改的理由= 责 任" 这样 定 义 。即使理 论 明白但在 实 践中判断是比 较 困 难 的。 
    下面以打电话举 例 说 明: 
    Modem.java
    interface Modem {
        public void dial(String pno);    //拨打 
        public void hangup();          //挂电话 
        public void send(char c);     //送信
        public char recv();           //收信
    }
    这样定义的Modem接口 看起来是一组机能,实质上是两组机能。 
       ◇ 连接管理 (dial、hangup) 
        ◇ 数据送受信(send、recv)
    为什么这边要分为两组机能呢?
    假设 Modem有以下修改: 
       ◇ 连接方法的修改  ⇒ Modem 类修改 
       ◇ 送受信方法的修改 ⇒ Modem类修改 
    因此对应相对的变化,这边作为两组机能。
     
    这样我们就可以重新定义如下 : 
    连接管理接口: 
        Connection {dial, hangup}
    数据送受信接口: 
        DataChannel {send, recv}
    然后具体的实现 交 给继 承接口的各自的 类 去 实现 。 
    一般来说, SRP 单一责任原则类的设计可以通过以下步骤来实现: 
      ①寻找机能 :有什么 样的机能? 
      ②汇总机能(定义类) :相似的机能 归总到一个类 
      ③考虑修改理由 :列 举类可能的修改理由 
      ④分割类:如果类有多个修改理由的场合,把类分割成多个类。或者是多个类因只有一个修改理由而汇总成一个类。 


    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hantiannan/archive/2009/09/23/4583691.aspx

  • 相关阅读:
    线程池和进程池
    初识数据库
    线程q
    event事件
    死锁和递归锁
    信号量
    PythonStudy——线程中的几种消息队列
    PythonStudy——GIL Global Interpreter Lock 全局解释器锁
    PythonStudy——异步回调
    PythonStudy——日志模块 logging
  • 原文地址:https://www.cnblogs.com/sunwei2012/p/1682386.html
Copyright © 2011-2022 走看看