【问题标题】:Design issues - observer,factory, composition and more设计问题 - 观察者、工厂、构图等
【发布时间】: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


    【解决方案1】:

    作为一名“设计模式”对我来说意义不大的工程师,我最近有幸与一些计算机科学家一起从事一个项目(正在进行中)。我之前已经实现了他们称之为“观察者模式”、“工厂”、“反应器”等的所有东西,但老实说,我发现这是一种完全无益的设计思考方式。

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

    不要试图把你的问题硬塞进教科书的解决方案中,很可能它不会很好地适应,你最终会得到比有用的抽象层次多得多的抽象层,这使得代码当你几个月后回到它时很难理解。

    我的两分钱,希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2011-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-25
      • 1970-01-01
      • 2010-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多