单个副本的数据将由不同的类访问

时间:2014-04-05 07:45:42

标签: c++ oop

我有一个包含大量数据成员和函数的类,其中每个函数都有一些自己的功能,并使用该类的成员变量完成一些工作。

主要的问题是,随着函数被添加到类中,类代码变得越来越大,难以维护。

这个类是被调用并输出一些结果的接口。

我想将这个类作为基类,并为每个函数创建一个派生类,它们彼此独立,并且可以使用基类中的公共数据成员。 但是这里的问题是,每个派生类都将包含一个单独的数据成员副本,而另一个模块应该不知道这些派生类。

我知道这可能是一个更简单的问题,但任何人都可以指出我可以在这里引用哪种设计模式。

1 个答案:

答案 0 :(得分:1)

实现共享应该通过组合而不是继承来更好地完成。继承模拟了一种is-a-relationship(Liskov替换原则)。从描述中可以看出,课程应该分成较小的课程,希望有一个单一的责任(单一责任原则)。然后,将类作为参数传递给构造函数或需要它们的函数中的客户端代码。然后可以通过按住指针,引用或 - 推荐 - shared_ptr来完成在多个类之间共享对象。

class BigClass {
public:
// lots of functions here
};

class Client1 {
public:
    Client1(std::shared_ptr<BigClass> b): mBigClass(b) {}

    void member() {
         // do something with mBigClass
    }
private:
    std::shared_ptr<BigClass> mBigClass;
};

但我建议强烈考虑拆分它(参见界面隔离原则)。