Salve a tutti, sono alle prese con i design pattern e non avendo la soluzione di questo esercizio base del class adapter non so se ho ragionato bene.
Ho ragionato facendo l'UML con IGrayPixel come target e RGBPixel come adaptee
Grazie a chi risponderà
Testo: si scriva un class adapter per la seguente classe RGBPixel per fare in modo che possa essere usata con un client che si aspetta l'interfaccia definita nella classe IGrayPixel. Per calcolare la luminosità di un pixel, a partire dalla tripletta RGB corrispondente, si usi la formula: grigio = 0.299*R+0.587*G+0.114*B
Target
class IGrayPixel{
public:
virtual unsigned char getPixel() = 0; //return gray level
};
Adaptee
class RGBPixel{
public:
RGBPixel(){_R = _G = _B = 100;};
int getR(){return _R;};
int getG(){return _G;};
int getB(){return _B;};
void setR(int R){_R = R;};
void setG(int G){_G = G;};
void setB(int B){_B = B;};
private:
int _R;
int _G;
int _B;
};
Adapter
FILE .h
#include "RGBPixel.h"
#include "IGrayPixel.h"
class RGBIGreyAdapter : public RGBPixel, public IGrayPixel{
public:
RGBIGreyAdapter(int _R, int _G, int _B) : RGBPixel(){}
virtual ~RGBIGreyAdapter(){}
// target
virtual unsigned char getPixel()override;
};
FILE .cpp
unsigned char RGBIGreyAdapter::getPixel() {
unsigned char Gray = static_cast<unsigned char>(0.299*getR() + 0.587*getG() +0.114*getB());
return Gray;
}