最近在重构色谱工作站程序,发现有几个类有重复性的代码(为了方便说明问题,去掉了不相关的代码):
class CAnalysisSample
{
protected:
CAnalysisSample(CAnalysisSystem* pSystem):m_pSystem(pSystem){}
public:
inline CAnalysisSystem* GetSystem() { return m_pSystem; }
inline const CAnalysisSystem* GetSystem() const { return m_pSystem; }
private:
CAnalysisSystem* m_pSystem;
};
class CAnalysisMethod
{
protected:
CAnalysisMethod(CAnalysisSystem* pSystem):m_pSystem(pSystem){}
public:
inline CAnalysisSystem* GetSystem() { return m_pSystem; }
inline const CAnalysisSystem* GetSystem() const { return m_pSystem; }
private:
CAnalysisSystem* m_pSystem;
};
class CAnalysisTask
{
protected:
CAnalysisTask(CAnalysisSystem* pSystem):m_pSystem(pSystem){}
public:
inline CAnalysisSystem* GetSystem() { return m_pSystem; }
inline const CAnalysisSystem* GetSystem() const { return m_pSystem; }
private:
CAnalysisSystem* m_pSystem;
};
class CAnalysisInstrument
{
protected:
CAnalysisInstrument(CAnalysisSystem* pSystem):m_pSystem(pSystem){}
public:
inline CAnalysisSystem* GetSystem() { return m_pSystem; }
inline const CAnalysisSystem* GetSystem() const { return m_pSystem; }
private:
CAnalysisSystem* m_pSystem;
};
很容易可以看出,对成员变量m_pSystem的声明和初始化以及两个get操作,完全都是一样的;并且这种完全一样的代码,还出现在了四个地方