单一职责原则(Single Responsibility Principle)

前端之家收集整理的这篇文章主要介绍了单一职责原则(Single Responsibility Principle)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

单一职责原则(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; 
};

猜你在找的设计模式相关文章