dimanche 29 janvier 2017

While using an object adapter design pattern why is it required to subclass Adaptee to override Adaptee behavior

For an Object Adapter design, GoF states :

makes it harder to override Adaptee behavior. It will require subclassing Adaptee and making Adapter refer to the subclass rather than the Adaptee itself

My question is that why is this subclassing required when we are creating the clases as follows :

class Target {
    public :
    virtual void op() = 0 ;
} ;

class Adaptee {
    public :
    void adapteeOp() {cout<<"adaptee op\n" ;}
} ;

class Adapter : public Target {
    Adaptee *adaptee ;
    public :
    Adapter(Adaptee *a) : adaptee(a) {}
    void op() {
        // added behavior
        cout<<"added behavior\n" ;
        adaptee->adapteeOp() ;
        // more added behavior
        cout<<"more added behavior\n" ;
    }
} ;

main() { //client
    Adapter adapter(new Adaptee) ;
    adapter.op() ;
}

I have not been able to appreciate the requirement for subclassing as mentioned by GoF when I am able to override the behavior here also.

Please explain what is the point that I am missing out.

Aucun commentaire:

Enregistrer un commentaire