Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Decorator pattern in C++

Can someone give me an example of the Decorator design pattern in C++ ? I have come across the Java version of it, but found it difficult to understand the C++ version of it (from the examples I found).

Thanks.

like image 728
AlgoMan Avatar asked Jun 07 '10 08:06

AlgoMan


3 Answers

I've found the website Sourcemaking to be a pretty good one when it comes to explaining different Design Patterns.

The Decorator design pattern has C++ examples, such as an overview example, a "before and after", and an example with packet encoding/decoding.

like image 57
Dan Avatar answered Oct 19 '22 12:10

Dan


Vince Huston Design Patterns, even though its layout is poor, has C++ implementation for most design patterns in the Gang of Four book.

Click for Decorator.

There isn't much difference with Java, except the manual memory handling that you'd better wrap with smart pointers :)

like image 32
Matthieu M. Avatar answered Oct 19 '22 14:10

Matthieu M.


#include <iostream>
using namespace std;

class Computer
{
public:
    virtual void display()
    {
        cout << "I am a computer..." << endl;
    }
};

class CDDrive : public Computer
{
private:
    Computer* c;
public:
    CDDrive(Computer* _c)
    {
        c = _c;
    }
    void display()
    {
        c->display();
        cout << "with a CD Drive..." << endl;
    }
};

class Printer : public Computer
{
private:
    CDDrive* d;
public:
    Printer(CDDrive* _d)
    {
        d = _d;
    }
    void display()
    {
        d->display();
        cout << "with a printer..." << endl;
    }
};

int main()
{
    Computer* c = new Computer();
    CDDrive* d = new CDDrive(c);
    Printer* p = new Printer(d);

    p->display();
}
like image 1
Rajeev Avatar answered Oct 19 '22 14:10

Rajeev