• 设计模式学习--面向对象的5条设计原则之单一职责原则--SRP


     

    一、SRP简介(SRP--Single-Responsibility Principle):
    就一个类而言,应该只专注于做一件事和仅有一个引起它变化的原因。
     
    所谓职责,我们可以理解他为功能,就是设计的这个类功能应该只有一个,而不是两个或更多。也可以理解为引用变化的原因,当你发现有两个变化会要求我们修改这个类,那么你就要考虑撤分这个类了。因为职责是变化的一个轴线,当需求变化时,该变化会反映类的职责的变化
    “就像一个人身兼数职,而这些事情相互关联不大,,甚至有冲突,那他就无法很好的解决这些职责,应该分到不同的人身上去做才对。”
     
    二、举例说明:
    违反SRP原则代码: 
    modem接口明显具有两个职责:连接管理和数据通讯;
    interface Modem
    {
        public void dial(string pno);
        public void hangup();
        public void send(char c);
        public void recv();
    }
     
    如果应用程序变化影响连接函数,那么就需要重构:
    interface DataChannel
    {
        public void send(char c);
        public void recv();
    }
    interface Connection
    {
        public void dial(string pno);
        public void hangup();
    }
     
    三、SRP优点:
    消除耦合,减小因需求变化引起代码僵化性臭味
     
    四、使用SRP注意点:
    1、一个合理的类,应该仅有一个引起它变化的原因,即单一职责; 
    2、在没有变化征兆的情况下应用SRP或其他原则是不明智的; 
    3、在需求实际发生变化时就应该应用SRP等原则来重构代码; 
    4、使用测试驱动开发会迫使我们在设计出现臭味之前分离不合理代码; 
    5、如果测试不能迫使职责分离,僵化性和脆弱性的臭味会变得很强烈,那就应该用Facade或Proxy模式对代码重构;
  • 相关阅读:
    测试同学都应该知道的断言知识...
    自己如何修改Airtest的源码
    如何选择适合你的图像识别算法
    如何测试基于Unity3D引擎的游戏
    Web前端-按钮点击效果(水波纹)
    C# Email 帮助类 EmailHelper
    WinForm 加载大数据时不闪烁的ListView
    LZZ磁力资源搜索4.2.2,整合多个站点,大部分资源都能搜到
    C#7.0新特性和语法糖详解
    6种css3 transform图片悬停动态效果
  • 原文地址:https://www.cnblogs.com/smiler/p/3265894.html
Copyright © 2020-2023  润新知