C++ 有没有更好的方法来设计这个消息传递代码?
A类使用以下两个函数来构建和发送消息1和2C++ 有没有更好的方法来设计这个消息传递代码?,c++,C++,A类使用以下两个函数来构建和发送消息1和2 builder::prepareAndDeliverMsg1(msg1_arg1,msg1_arg2) { } builder::prepareAndDeliverMsg2(msg2_arg1,msg2_arg2) { } 现在,引入了一个新的B类,它将在两个阶段中完成a所做的工作 第一阶段->准备 第2阶段->交付 我正在考虑扩展builder类,如下所示: ///---- builder::prepareMsg1(msg1_arg1,msg1
builder::prepareAndDeliverMsg1(msg1_arg1,msg1_arg2)
{
}
builder::prepareAndDeliverMsg2(msg2_arg1,msg2_arg2)
{
}
现在,引入了一个新的B类,它将在两个阶段中完成a所做的工作
第一阶段->准备
第2阶段->交付
我正在考虑扩展builder类,如下所示:
///----
builder::prepareMsg1(msg1_arg1,msg1_arg2)
{
}
builder::prepareMsg2(msg2_arg1,msg2_arg2)
{
}
builder::deliverMsg1(msg1_arg1)
{
This function, inserts re-calculated msg1_arg1 into the prepared message in stage1
}
builder::deliverMsg2(msg2_arg1)
{
This function, inserts re-calculated msg2_arg1 into the prepared message in stage1
}
// These two functions are still retained for the usage of class A
builder::prepareAndDeliverMsg1(msg1_arg1,msg1_arg2)
{
}
builder::prepareAndDeliverMsg2(msg2_arg1,msg2_arg2)
{
}
//---
我想知道,是否有更好的设计方法?我觉得您的解决方案还可以。也许对于每条消息,创建您自己的类并从基本消息类继承
class TBaseMsg
{
public:
virtual void prepare() = 0;
virtual void deliver() = 0;
}
你可以看看装饰设计模式
要扩展Darks的想法,您可以拥有一个基类,该基类实现组合的prepare和deliver,并根据需要允许派生类覆盖这些类:
class base {
virtual bool prepareMsg1() = 0;
virtual bool prepareMsg2() = 0;
virtual bool deliverMsg1() = 0;
virtual bool deliverMsg2() = 0;
bool prepareAndDeliverMsg1(){
prepareMsg1();
deliverMsg1();
}
bool prepareAndDeliverMsg2(msg2_arg1,msg2_arg2){
prepareMsg2();
deliverMsg2();
}
};
您可能会发现两个派生类中的许多功能是相同的,在这种情况下,您不希望在基类中使用纯虚拟:
class base {
virtual bool prepareMsg1(args) {//not pure virtual
//do the common stuff
}
};
class derived {
bool prepareMsg1( args ) {
base::prepareMsg1(args);
//code to specailise the message
}
};
甚至可能是基类实现了原始类,但允许派生第二个类,而无需重复公共代码。谢谢Patrick,尽管您的解决方案需要重写现有代码。我希望这样做可以获得更简洁的解决方案。编写C++ C++ CONDEM的人使用的C比C++多。记住,在一个类中定义一个虚拟析构函数,它具有(或来自一个具有至少一个虚函数的类)。或者,您可能会惊讶地发现,在某些情况下,派生类的析构函数没有被调用。感谢所有回答这个问题的专家们。。。!