Design Patterns in life and Ruby — gain an intuitive understanding of OO design patterns by linking them with real-life examples.
Imagine yourself as a movie star, a big one. You are so famous that everyone in Hollywood wants to work with you. You never lack acting opportunities. So many requests come to you that you need an agent to handle them.
Here is what you want your agent to do.
- When a new filming request comes, the agent first checks to see if it fits your schedule.
- If so, the agent then checks your preferences. (For example, you have been in too many comedies, and you want your next film to be a drama.)
- Finally, if the new film fits both your schedule and preferences, the agent sends the request to you and lets you decide if you want to take it or not.
The agent is essentially a proxy that sands in for you.
This is a case calls for the Proxy Pattern.
The Proxy Pattern provides a surrogate or placeholder for another object to control access to it.
Time for some code
class ActorProxy attr_reader :schedule, :preference, :actor def initialize(schedule, preference, actor) @schedule = schedule @preference = preference @actor = actor end def handle(request) return 'Sorry, blah blah blah' unless schedule.fit(request) && preference.fit(request) if actor.wants_to_take(request) 'We would love to take the opportunity! blah blah blah' else 'Sorry, blah blah blah' end end end
The code for the ActorProxy
does exactly what we just described. It handles requests for its actor and only passes a request down when necessary.
Notice the person with a request never deals with you, the actor, directly. Neither do you have to deal with requesters directly.
Revisiting the Definition of Proxy Pattern
The Proxy Pattern provides a surrogate or placeholder for another object to control access to it.
In order to protect your time and privacy, your agent becomes a placeholder for you and limits other people’s access to you. Any request for you has to go through your agent first.
Why we need a proxy
In our example, we need a proxy because as a movie star, your time is limited and expensive. We want you to spend your time filming instead of figuring out your schedule.
In the software world, the Proxy Pattern is commonly used for objects that are either remote, expensive to create, or in need of securing.
Oh! I got a drama film that fits your schedule, would you like to take a look at the script? =)
Subscribe below so you won’t miss the next post!
Enjoyed the article?
My best content on Software Design, Rails, and Career in Dev. Delivered weekly.
Hey, i really liked your posts.. your posts makes difficult things easier to undestand