我有以下现有课程:
class Gaussian {
public:
virtual Vector get_mean() = 0;
virtual Matrix get_covariance() = 0;
virtual double calculate_likelihood(Vector &data) = 0;
};
class Diagonal_Gaussian : public Gaussian {
public:
virtual Vector get_mean();
virtual Matrix get_covariance();
virtual double calculate_likelihood(Vector &data);
private:
Vector m_mean;
Vector m_covariance;
};
class FullCov_Gaussian : public Gaussian {
public:
virtual Vector get_mean();
virtual Matrix get_covariance();
virtual double calculate_likelihood(Vector &data);
private:
Vector m_mean;
Matrix m_covariance;
};
Run Code Online (Sandbox Code Playgroud)
如您所见,Gaussian类充当接口但没有任何实现.这一切都很好.
现在我想创建一个类"AdaptedGaussian",其中在计算似然性之前,将改变提供给calculated_likelihood的数据向量.
一些要求:
我现在的想法是:
class Adapted_Gaussian : public Gaussian {
private:
Gaussian* m_g;
public:
virtual Vector get_mean() { return m_g->get_mean(); }
virtual Matrix get_covariance() { return m_g->get_covariance(); }
virtual double calculate_likelihood(Vector &data)
{
//do something with data
return g->calculate_likelihood(Vector &data);
}
}
Run Code Online (Sandbox Code Playgroud)
可能有一些缺点:
我是以正确的方式做到这一点的吗?或者有更好的方法来实现这个?
是否有一种很好的方法可以将每个未实现的方法标准委托给m_g的相同命名方法?
看起来不错,我认为这是适配器模式的一个非常经典的实现.只是不要忘记为高斯类声明一个虚拟析构函数.至于缺点.