我是面向对象设计的新手,我希望我能得到一些关于设计这个项目的更好方法的建议。
我从一个 FooSequence 类开始,它应该在一个向量中初始化和存储一系列 Foo 对象。我希望能够从此序列中修改和删除 Foo 对象。即应用多种算法来处理整个Foos序列,并从这个序列中删除质量差的Foos。
我不确定我应该如何将 FooSequence 与处理 Foo 对象的类接口。如果有人能详细说明相关的设计模式和陷阱,我将不胜感激。
我想我可以:
a) 扩展 FooSequence 的范围并重命名为 FooProcessor 之类的名称,其中 FooProcessor 的成员函数将处理成员 vSequence_
b) 提供访问器和修改器函数以允许对 Foo 对象进行读写访问。使用另一个类 (FooProcessor) 从 FooSequence 中修改和删除 Foo 对象。我不确定这应该如何接口。
//A simplified header of the FooSequence class
class FooSequence {
public:
FooSequence(const std::string &sequence_directory);
~FooSequence();
//To process the sequence, another class must know the capacity of the vector
//I'm not sure if interfacing to std::vector member functions makes much sense
std::size_t getSize() const { return vSequence_.size(); }
//Should I use an accessor that returns a non-const reference??
//In this case, Why not just make the vector public?
std::vector<std::shared_ptr<Foo>> getFoo;
//Return a non-const reference to individual Foo in the sequence??
//This doesn't help iterate over the sequence unless size of vector is known
std::shared_ptr<Foo>& operator[] (std::size_t index) {
return vSequence_[index];
}
private:
const std::string directory_;
std::vector<std::shared_ptr<Foo>> vSequence_;
FooSequence(const FooSequence &);
void operator=(const FooSequence &);
};
我尝试过咨询 GoF 的设计模式,但我认为它对我来说太先进了。任何建议将不胜感激。
编辑:虽然我认为这个问题应该有一个关于面向对象设计的一般答案,但我想我应该澄清一下,我希望将 ImageSequence 类与 OpenCV 接口。我想知道我可以使用哪些策略或设计来最好地将 ImageSequence 与其他类接口