gpt4 book ai didi

c++ - 类接口(interface)重复

转载 作者:太空宇宙 更新时间:2023-11-04 13:08:32 36 4
gpt4 key购买 nike

我有时会遇到这样的情况,主要是在使用旧代码时,一个类只是将调用转发给另一个类。想象一下,有一个旧 Controller 可以控制某些东西,但其中一些可以专用于新类。现在,旧 Controller 将调用新类接口(interface)。

例。

class Controller {
public:
void addObject(const std::string & id,
const Object * obj) {
m_Wrk.addObject(id, obj);
}
private:
Worker m_Wrk;
};

class Worker {
public:
void addObject(const std::string & id,
const Object * obj) {
//do actual adding
}
};

现在,在考虑测试软件时,接口(interface)可能需要在两个类中进行测试,而在 Controller 中更难,因为它不需要检查 Controller 测试中的 worker 更改。

这种用法是否特别糟糕,或者可以在上面解释的现有代码中使用这种设计。

谢谢

最佳答案

很难回答这段代码是好是坏——这取决于环境。有问题的代码(除了 m_Wrk 字段应该是一个指针这一事实)是一个 PImpl模式,这是一种 bridge图案。此模式用于拆分抽象和实现,以便它们可以独立更改。

例如,如果您编写一个 C++ 库,并且希望提供一个稳定的 ABI,如果公共(public)接口(interface)没有变化,该 ABI 也不会改变,您可以将 Controller 接口(interface)放在header,连同Worker类的前向声明,并将Worker的接口(interface)和实现放在.cpp文件中。当 Worker 改变时,Controller ABI 保持不变。如果将实现细节直接放在 Controller 类中,ABI 可能会发生变化。

此外,这种模式(通常是 Bridge)允许您使用给定抽象的不同实现,因此,可以根据 Liskov 替换将接口(interface)扩展方面的继承和继承分开。

此外,如果 Controller 实现与 Worker 相同的接口(interface),将来它可以实现一些额外的行为,例如 proxy模式。

如果其中一种情况发生在您的项目中(或将来可能发生),那么它可能是一个好的代码。如果不是,那只是一个不必要的并发症。

关于c++ - 类接口(interface)重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41015237/

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