【发布时间】:2012-09-15 04:51:43
【问题描述】:
我想知道用c++创建一个包含多个纯虚方法的抽象类好不好?
例如在某些情况下,例如实现会话启动协议的对话,我们发现它可以使用桥接模式来实现。但是为通用操作拥有抽象基类会导致拥有一个非常大的抽象类。现在从性能的角度来看,使用和实现这样的类有什么效果?
假设我们有不同的对话框,每个对话框都有自己的实现。 (例如:InviteDialog、RegisterDialog、InfoDialog、...)
应用桥接模式:
class IIDialog{
public:
/*there are multiple pure virtual methodes at least 15*/
virtual int32_t SendResponse(ISipMessage* response) = 0;
protected:
/*there are multiple methods that use pure virtual methods*/
int32_t Send_Response(){retun SendResponse(response);}
}
class IInviteDialog : public IIDialog
{
/*Implemet virtual methods*/
}
class IRegisterationDialog : public IIDialog
{
/*implement virtual methode*/
}
忽略的其他部分实现(上述类使用的实际实现和实现抽象)
谢谢
【问题讨论】:
-
从设计的角度来看,拥有一个大类往往不是坏事,不管它是否抽象。
-
如果您强调该开销,您可能会发现 24/7 服务器可能在一个月内为您节省大约 2-3 秒的 CPU 时间。我可以自信地说,如果你有一个大的 vtable 布局,你有更重要的事情要强调,以节省这几秒钟,比如为什么你一开始就有这么大的 vtable。
-
在设计之初,我选择使用继承来实现这些类。但我发现使用继承使类的客户端具有类型转换。为了防止类的客户端在使用派生类时进行类型转换,我决定应用桥接模式。在桥接模式中,我们需要识别共性和变异性。通过这样做,我发现了非常多的共性操作。我必须在基于 Gof 书的抽象类中具有通用操作。我想知道你的建议是什么?
标签: c++ performance visual-c++ design-patterns bridge