2014-04-05 36 views
0

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

主要问题在于功能被添加到班级中,班级代码越来越大,难以维护。

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

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

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

回答

1

执行共享应该更好地通过组合而不是继承来完成。继承模型是一种关系(Liskov替代原则)。从描述来看,这听起来像班级应该分成小班,希望有一个单一的责任(单一责任原则)。然后,将这些类作为构造函数中的参数或需要它们的函数传递给您的客户端代码。然后可以通过持有指针,引用或 - recommended - 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; 
}; 

但我建议强烈考虑拆分它(请参阅接口隔离原理)。