gpt4 book ai didi

c++ - 将相同操作应用于所有派生对象的任何设计模式

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:46:14 24 4
gpt4 key购买 nike

我有一个场景,我在考虑是否可以应用任何设计模式。场景是这样的:一个基类有2个派生类,在main函数中我们需要对两个派生类做同样的操作。我在 C++ 中需要这个。

例如:

Class Base
{
virtual bool DoWeHaveToPerformOperation()=0;
virtual void PerformOperation()=0;
};

Class Derived1:public Base
{
bool DoWeHaveToPerformOperation();
void PerformOperation();
};

Class Derived2:public Base
{
bool DoWeHaveToPerformOperation();
void PerformOperation();
};

int main()
{
Derived1 d1;
if(d1.DoWeHaveToPerformOperation())
{
d1.PerformOperation();
}

Derived2 d2;
if(d2.DoWeHaveToPerformOperation())
{
d2.PerformOperation();
}
}

不是像上面那样在 main 中编写,我想知道是否有一些我可以优化代码的方法(或者是否有可以使用的模式)。我正在考虑至少将公共(public)代码移动到一个单独的函数并为两个对象调用它

CheckAndOperate(Base* b)
{
if(b->DoWeHaveToPerformOperation())
{
b->PerformOperation();
}
}

并为两个派生对象调用它..但我觉得它仍然可以优化..

int main()
{
base* b1=new derived1();
CheckAndOperate(b1);
base* b2=new derived2();
CheckAndOperate(b2);
delete b1;
delete b2;
}

有什么建议吗?

最佳答案

Template Method模式通常处理这类事情。

Class Base
{
public:
void PerformOperation()
{
if(DoWeHaveToPerformOperation())
{
DoPerformOperation();
}
}

protected:
virtual bool DoWeHaveToPerformOperation()=0;
virtual void DoPerformOperation() = 0;
};

Class Derived1:public Base
{
bool DoWeHaveToPerformOperation();
void DoPerformOperation();
};

Class Derived2:public Base
{
bool DoWeHaveToPerformOperation();
void DoPerformOperation();
};

int main()
{
Derived1 d1;
d1.PerformOperation();

Derived2 d2;
d2.PerformOperation();

return 0;
}

关于c++ - 将相同操作应用于所有派生对象的任何设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23203344/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com