diff --git a/proxy/Proxy.cpp b/proxy/Proxy.cpp new file mode 100644 index 0000000..ff1a251 --- /dev/null +++ b/proxy/Proxy.cpp @@ -0,0 +1,68 @@ +/* + * C++ Design Patterns: Proxy + * Author: Jakub Vojvoda [github.com/JakubVojvoda] + * 2016 + * + * Source code is licensed under MIT licence + * (for more details see LICENCE) + * + */ + +#include + +/* + * Subject + * defines the common interface for RealSubject and Proxy + * so that a Proxy can be used anywhere a RealSubject is expected + */ +class Subject { +public: + virtual ~Subject() { /* ... */ } + + virtual void request() = 0; + // ... +}; + +/* + * Real Subject + * defines the real object that the proxy represents + */ +class RealSubject : public Subject { +public: + void request() { + std::cout << "Real Subject request" << std::endl; + } + // ... +}; + +/* + * Proxy + * maintains a reference that lets the proxy access the real subject + */ +class Proxy : public Subject { +public: + Proxy() { + subject = new RealSubject(); + } + + ~Proxy() { + delete subject; + } + + void request() { + subject->request(); + } + // ... + +private: + RealSubject *subject; +}; + + +int main() +{ + Proxy *proxy = new Proxy; + proxy->request(); + + return 0; +} diff --git a/proxy/README.md b/proxy/README.md index ba536cf..ce01967 100644 --- a/proxy/README.md +++ b/proxy/README.md @@ -1,6 +1,7 @@ ## Proxy -Provide a surrogate or placeholder for another object to control access to it. +Proxy pattern provides a surrogate or placeholder for another object to control access to it. +The pattern has structural purpose and applies to objects. ### When to use