【问题标题】:Flyweight Pattern in C++C++ 中的享元模式
【发布时间】:2013-12-27 12:06:42
【问题描述】:

在创建享元模式时,通常如何存储多余的对象。假设我创建了一架飞机。

class Aircraft
{
private:
    char make[32];
    char model[32];
    double cruiseSpeed;
    double cruiseAltitude;
    double climbRate;
    double wingspan;
    double fuselageLength;

    AircraftType craftType;

public:

    Aircraft(void);
    Aircraft(AircraftType);
    ~Aircraft(void);

    void setMake(char*);
    void setModel(char*);
    void setCruiseSpeed(double);
    void setCruiseAltitude(double);
    void setClimbRate(double);
    void setWingSpan(double);
    void setFuselageLength(double);

    char* getMake();
    char* getModel();
    double getCruiseSpeed();
    double getCruiseAltitude();
    double getClimbRate();
    double getWingSpan();
    double getFuselageLength();    
};

假设我正在从 xml 数据表中读取许多飞机,所以我只想创建一个这些对象并将其余信息存储在某处。我会创建另一个管理享元信息的类,然后可能将一个带有 Aircraft 对象的键传递给它,以便一次输入唯一的实例吗?或者您是否会完全绕过将信息放入对象实例中?

对于这种类型的对象,不创建多个实例的唯一效率是get和set吗?

【问题讨论】:

    标签: c++ oop design-patterns


    【解决方案1】:

    查看boost flyweight implementation。 完成后,只需使用 boost flyweight。

    如果你不想使用 boost,在这种情况下使用 boost。

    【讨论】:

    • 我不能使用任何外部库。这并不能真正帮助回答我的问题,这是关于设计本身更具理论性的问题。
    • "如果您不想使用 boost,请使用 boost" - 什么?这有什么意义?
    • 他的意思是在没有 Boost 的情况下使用 C++ 就像驾驶没有轮子的汽车。
    • @phs 不过,有些人似乎很喜欢这样做,一路上发明(真的是粗制滥造的)轮子。
    • @user2079828 实际上,我也确实回答了你的问题,非常不错,说有一个非常好的实现,你可以看看。 (然后,使用它。)
    猜你喜欢
    • 1970-01-01
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    • 2021-12-21
    • 1970-01-01
    相关资源
    最近更新 更多