加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

单一职责原则(Single Responsibility Principle)

发布时间:2020-12-14 01:19:29 所属栏目:百科 来源:网络整理
导读:单一职责原则(Single Responsibility Principle) flyfish 原文地址 动机 在此背景中,一个职责是考虑因一个原因而改变,如果一个类,改变它有两个原因。我们应该根据功能性分成两个类。每 个类处理一个职责 在未来当我们需要做出某种改变时,只需要修改该

单一职责原则(Single Responsibility Principle)

flyfish

原文地址

动机
在此背景中,一个职责是考虑因一个原因而改变,如果一个类,改变它有两个原因。我们应该根据功能性分成两个类。每

个类处理一个职责
在未来当我们需要做出某种改变时,只需要修改该类就可以了。当我们去改变一个具有多个职责的类时,这个变动可能会

影响该类的相关职责的其他功能

单一职责是简单直观的原则,但是在实践中有时很难做到

目的
一个类要变更只有一个原因

示例 该示例更改为C++编写
让我们假设我们需要一个对象来保存电子邮件消息。我们将在下面示例中的使用IEmail接口。
乍一看,一切都很好。更仔细地看,我们可以看到IEmail接口和Email类有两个职责(改变的理由)。
一个是在一些电子邮件协议pop3或imap中使用这个类。如果其他的协议支持对象序列化,那么就要添加新的代码以支持新

的协议。
即使邮件内容是string类型在未来我们也希望支持HTML或者其他格式

// single responsibility principle - bad example
class IEmail
{
public:
    virtual void setSender(string sender);
    virtual void setReceiver(string receiver);
    virtual void setContent(string content);
};


class Email :public IEmail
{
public:
    void setSender(string sender) {}// set sender; 
    void setReceiver(string receiver) {}// set receiver;
    void setContent(string content) {}// set content; 
};

//改进结果

// single responsibility principle - good example
class IEmail
{
public:
    virtual void setSender(string sender);
    virtual void setReceiver(string receiver);
    virtual void setContent(string content);
};

class IContent
{

};

class ContentA :public IContent //
{
public:
    string getAsString(); // used for serialization
};
class ContentB :public IContent //
{
public:
    string getAsString(); // other format like html
};


class Email :public IEmail
{
public:
    void setSender(string sender) {}// set sender; 
    void setReceiver(string receiver) {}// set receiver;
    void setContent(IContent content) {}// set content; 
};

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读