所以我需要设计类似的东西:设计问题 - 观察者,工厂,组成多
我有可能含有大量的纸张(可能的不同种类)的电子表格。
每一薄板上有假设1A-9Z细胞。
在每个小区我可以有一个以上: 字符串, 号, 式 - 这意味着所述细胞获取的操作,例如+, - ,/ *等...和细胞数, 并在细胞我有操作的结果。
我需要设计的类,所以在未来我可以添加细胞的其它类型(除了串/数字/式),也可以添加不同类型的操作,以式 - 所有以容易的方式。
ü会怎么设计呢?
我虽然对这样的事情:
class SpreadSheet
{
private:
vector<Isheet> sheets;
public:
write(Isheet sheet,int CellNum,ICell value);
GetValue(Isheet sheet,int CellNum,ICell value);
AddSheet(ISheet sheet);
};
class Isheet
{
vector<ICell> cells; // can i do something like that ? cause ICell is a template
};
template<class T>
class ICell
{
Vector<Iobserver> observers;
public:
T GetValue() {return m_value;};
SetValue(T val) {m_value=val;};
AddObserver(Iobserver obs);
NotifyAll();
GetPos() {return m_pos;};
private:
T m_value;
int m_pos;
};
class CInt : public ICell<int>
{
};
class CString : public ICell<std:string>
{
};
class CFormula : public ICell<int>, Iobserver
{
};
class Iobserver
{
Update(int pos);
};
,无论如何,我真的不知道我应该创建单元格混凝土类(CINT,CString的,CFormula),我应该使用某种工厂的?在哪里放工厂?在ISheet中? 和我最关心的,我应该在哪里计算的CFormula细胞正确的结果? 我使用观察者模式来保持公式单元格在其他单元格更改的情况下更新。
任何建议将是巨大的