Proxy

1. Usage

Proxy pattern in general is Wrapper. Sometimes its hard/impossible to modify real object. For client using Proxy object should be same like using real object as they share same interface.

Consider following usage scenarios:

  • Remote Proxy – in distributed communication we create local proxy object which hide all communication with remote object
  • Virtual Proxy – handles situations when object is expensive to create.(lazy initialization)
  • Protection Proxy – Wrapper of extra protection measures around real object
  • Smart proxy – adds extra operations when object is accessed.

While adapter bridges the gap between two classes – proxy provides a surrogate to control the access to the real object

2. UML class diagram

proxy

3. Pros

  • More maintainable if number of usage of object more then 4-5
  • More control over method calls.
  • More robust as only constructed object will be available to client

4. Cons

  • Code duplication needs to copy all fields from original object.

5. Source code

#include <iostream>

using namespace std;

class ICar {
public:
  virtual void DriveCar() = 0;
};

class Car : public ICar {
public:

    void DriveCar() {
        cout << "Driving Car!" << endl;
    }
private:
  ICar* _pImpl;
};

class ProxyCar : public ICar {
public:
  ProxyCar(int driver_age) :  _driver_age(driver_age) {
      _pImpl = new Car();
  }

  void DriveCar() {
    if (_driver_age >= 16){
      _pImpl->DriveCar();
    }else{
        cout << "Driving car for under age not allowed." << endl;
    }
  }

private:
  ICar* _pImpl;
  int _driver_age;
};

int main()
{
    ICar * car = new ProxyCar(14);
    car->DriveCar();
    car = new ProxyCar(21);
    car->DriveCar();
    return 0;
}


Leave a Reply

Your email address will not be published. Required fields are marked *