美文网首页Exceptional C++
【Exceptional C++(11)】Classes之间的关

【Exceptional C++(11)】Classes之间的关

作者: downdemo | 来源:发表于2018-01-29 14:11 被阅读3次

问题

  • 一个网络程序有两种通信行为,每种行为有自己的协议规定,两个规定之间有一些相似之处,某程序员设计如下,将共同运算和信息封装在BasicProtocal class中
class BasicProtocal {
public:
    BasicProtocal();
    virtual ~BasicProtocal();
    bool BasicMsgA(...);
    bool BasicMsgB(...);
    bool BasicMsgC(...);
};
class Protocal1 : public BasicProtocal {
public:
    Protocal1();
    ~Protocal1();
    bool DoMsg1(...);
    bool DoMsg2(...);
    bool DoMsg3(...);
    bool DoMsg4(...);
};
class Protocal2 : public BasicProtocal {
public:
    Protocal2();
    ~Protocal2();
    bool DoMsg1(...);
    bool DoMsg2(...);
    bool DoMsg3(...);
    bool DoMsg4(...);
    bool DoMsg5(...);
};
  • 每个DoMsg...()都调用BasicProtocal::Basic...()执行共同工作,然后再执行实际传送工作。此设计有需要改进的地方吗?

解答

  • 这是一个十分常见的OO class关系上错误设计,这是一个很明显的is implemented in terms of关系,这种关系应该使用private继承或membership实现。但是希望塑模is implemented in terms of关系时,选择membership/aggregation而不要用private继承,除非需要存取protected成员或重写虚函数

相关文章

网友评论

    本文标题:【Exceptional C++(11)】Classes之间的关

    本文链接:https://www.haomeiwen.com/subject/mluxzxtx.html