He estado trabajando a través de "C++ Patrones de Diseño y fijación de Precios de Derivados" de Mark Joshi. En el capítulo 4 Parameters
clase utiliza un puente de patrón y se emplea un clone()
método.
La justificación del patrón menciona que permite la extensión de los parámetros de la clase heredando de ParametersInner
y siempre que la clase de con virtual
clone()
, Integral(double time1, double time2)
y IntegralSquare(double time1, double time2)
métodos.
Yo, no obstante, puede alcanzar los mismos con un simple inherritance. También puedo evitar tener que utilizar el método clone mediante std::make_unique
fuera de la clase.
Mi versión de esto es la siguiente. (Yo uso un curve
de la clase en lugar de un parameters
de la clase)
#include <vector>
#include <memory>
class curve
{
public:
virtual double Integral(double time1, double time2) const = 0;
virtual double IntegralSquare(double time1, double time2) const = 0;
virtual double Mean(double time1, double time2) const {
return Integral(time1, time2) / (time2 - time1);
}
virtual double RootMeanSquare(double time1, double time2) const {
return IntegralSquare(time1, time2) / (time2 - time1);
}
};
class constant_curve : curve
{
public:
constant_curve() = default;
constant_curve(const constant_curve &) = default;
constant_curve & operator=(const constant_curve &) = default;
constant_curve(double value):
m_val{value}
{}
virtual double Integral(double time1, double time2) const override{
return (time2 - time1)*m_val;
}
virtual double IntegralSquare(double time1, double time2) const override{
return (time2 - time1)*m_val*m_val;
}
private:
double m_val;
};
int main()
{
std::vector<std::unique_ptr<curve>> curves;
curves.emplace_back(std::make_unique<constant_curve>(10));
}
Mi Pregunta es la siguiente:
¿Cuáles son las razones para usar el puente patrón como se usa en el libro como aposición a la más simple patrón de arriba?
No estoy seguro de si me permite copiar el código a este foro, así que aquí hay un enlace al código. Patrones de diseño y fijación de Precios de Derivados 2ª Edición.