设计问题 - 观察者,工厂,组成等

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细胞的正确结果?我使用观察者模式来保持公式单元格更新,以防其他单元格的更改.

任何建议都会很棒

Jam*_*mes 5

作为一个"设计模式"意味着很少的工程师,我最近有幸与一些计算机科学家一起开展了一个项目(正在进行).我之前已经实现了他们称之为"观察者模式","工厂","反应堆"等所有的东西,但说实话,我发现这是一种考虑设计的完全无益的方式.

您需要的是解决您的问题.想一想:数据流,思考执行路径,思考需要什么导致什么.

不要试图将你的问题变成教科书解决方案,可能性,它不适合,并且你最终会得到更多的抽象层次而不是有用的,并且这使得代码很难了解你几个月后再回来的时候.

我的两分钱,希望这是有帮助的.