我有一个包含大量数据成员和函数的类,其中每个函数都有一些自己的功能,并使用该类的成员变量完成一些工作。
主要的问题是,随着函数被添加到类中,类代码变得越来越大,难以维护。
这个类是被调用并输出一些结果的接口。
我想将这个类作为基类,并为每个函数创建一个派生类,它们彼此独立,并且可以使用基类中的公共数据成员。 但是这里的问题是,每个派生类都将包含一个单独的数据成员副本,而另一个模块应该不知道这些派生类。
我知道这可能是一个更简单的问题,但任何人都可以指出我可以在这里引用哪种设计模式。
答案 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;
};
但我建议强烈考虑拆分它(参见界面隔离原则)。