Ida*_*dan 2 c++ oop design-patterns class
所以我需要设计类似的东西:
我有一个电子表格,可以包含许多表(可能是不同种类).
每张纸都说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);
};
Run Code Online (Sandbox Code Playgroud)
无论如何,我真的不知道我应该在哪里创建单元格混凝土类(CInt,Cstring,CFormula),我应该使用某种工厂吗?在哪里放工厂?在ISheet中?而我主要担心的是,我应该在哪里计算出CFormula细胞的正确结果?我使用观察者模式来保持公式单元格更新,以防其他单元格的更改.
任何建议都会很棒
作为一个"设计模式"意味着很少的工程师,我最近有幸与一些计算机科学家一起开展了一个项目(正在进行).我之前已经实现了他们称之为"观察者模式","工厂","反应堆"等所有的东西,但说实话,我发现这是一种考虑设计的完全无益的方式.
您需要的是解决您的问题.想一想:数据流,思考执行路径,思考需要什么导致什么.
不要试图将你的问题变成教科书解决方案,可能性,它不适合,并且你最终会得到更多的抽象层次而不是有用的,并且这使得代码很难了解你几个月后再回来的时候.
我的两分钱,希望这是有帮助的.