Kha*_*CTG 3 c++ interface composite
最近,我了解到了composite pattern.我想在我的工作中使用它,我必须实现文件和文件夹类.我意识到子类喜欢CFile并且Cfolder必须具有相同的属性(name和size).所以我可以把属性放进去interface吗?据我所知,这样做并不好.但是,我不明白为什么我不应该这样做.或者还有其他解决方案吗?

我想说这不是问题.区别在于,您有一个抽象基类,而不是纯接口类.但是,如果您希望保留将接口用于不依赖于这些特定成员变量的实现的灵活性,那么您始终可以创建一个接口类以及一个抽象基类,以获得完全的灵活性.虽然这可能过早变得过于复杂,但如果需要,您可以随后将界面从抽象基础中分离出来.
using CItemUPtr = std::unique_ptr<class CItem>;
/**
* Interface class
*/
class CItem
{
public:
virtual ~CItem() {}
virtual CItemUPtr findByName(std::string const& name) = 0;
virtual void setHidden(bool a, bool b) = 0;
};
/**
* Abstract base class
*/
class AbstractCItem
: public CItem
{
protected:
std::string name;
std::size_t size;
};
class CFile
: public AbstractCItem
{
public:
CItemUPtr findByName(std::string const& name) override
{
// stuff
return {};
}
void setHidden(bool a, bool b) override {}
};
Run Code Online (Sandbox Code Playgroud)