【发布时间】:2010-12-31 23:33:23
【问题描述】:
所以我需要设计类似的东西:
我有一个电子表格,其中可以包含许多工作表(可能是不同类型的)。
每张纸都有 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 单元格的正确结果? 我使用观察者模式来更新公式单元格,以防其他单元格发生变化。
任何建议都会很棒
【问题讨论】:
标签: c++ design-patterns class oop