从松散耦合的类中收集数据

时间:2014-05-19 19:41:15

标签: c++

在一个软件项目中,我已经尽力使这些类松散耦合。现在,我正努力将分散的数据(从松散耦合的类的对象)转换为数据对象。该数据对象(例如用于记录)是预定义的,并且必须用来自几个类的对象的数据填充。 由于真正的代码是专有的,我已经编写了下面的代码来解释我的问题:

class Gear {
public:
    Gear(unsigned int amount);
    ~Gear();

    void shiftUp();
    void shiftDown();

private:
    const unsigned int amount;
    unsigned int current;
};

class Speedometer {
public:
    Speedometer();
    ~Speedometer();

    void display() const;

private:
    double currentSpeed;
};

class Bike {
public:
    Bike(unsigned int nrWheels, Gear& gear, Speedometer& speedometer);
    ~Bike();

    void peddle() const;
    void break() const;

private:
    const unsigned int nrWheels;
    Gear& gear
    Speedometer& speedometer;
};

class Cyclist {
public:
    Cyclist(const std::string name, Bike& bike);
    ~Cyclist();

    void ride();

private:
    const std::string name;
    Bike& bike;
};

class Factory {
public:
    Factory();
    ~Factory();

    Cyclist& build() const;
};

struct PredefinedData {
    PredefinedData();
    ~PredefinedData();

    std::string cyclistName;
    unsigned int nrWheels;
    unsigned int currentGear;
    double currentSpeed;
};

Factory(对象)使用它引用的所有对象(递归)构建一个Cyclist(对象)。在执行程序期间,所有这些对象的状态都将发生变化。为了例如使用其所有引用记录Cyclist对象的状态,使用PredefinedData类中的对象。该对象必须填充骑自行车者及其参考文献的数据。

我自己的一些想法/测试:

  • 我尝试为每个类提供PredefinedData对象的引用,但这意味着其他对象可以知道对象的私有数据。
  • 我尝试过一个提供填充PredefinedData对象的函数的Filler对象,但感觉就像是复制了PredefinedData类。
  • 我还考虑从几个类继承一个类,以便能够让每个类只访问它应该有权访问/填充的数据。

你会如何解决这个问题?这种情况有设计模式吗?

1 个答案:

答案 0 :(得分:0)

我这样做:

class Cyclist {
public:
    Cyclist(const std::string name, Bike& bike)
      : data(name), bike(bike) {}

    const PredefinedData& getPredefinedData()
    {
        data.nrWheels = bike.getNrWheels();
        data.currentGear = bike.gear.getCurrent();
        data.currentSpeed = bike.speedometer.getSpeed();
        return data;
    }

private:
    PredefinedData data; // includes name, used as a cache
    Bike& bike;
};