Upload
prodigyview
View
960
Download
1
Tags:
Embed Size (px)
DESCRIPTION
Learn how to integrate anonymous functions/closures with design patterns.
Citation preview
Anonymous Functions and Design Patterns
When Yin Finally Meets Yang
OverviewObjective
Learn how to use the closures/anonymous functions with the design patterns
Requirements
Knowledge of the adapter design pattern
Knowledge of the observer design pattern
Knowledge of the intercepting filter design pattern
Estimated Time
12 minutes
www.prodigyview.com
Follow Along With A Code Example
1. Download a copy of the example code at www.prodigyview.com/source.
2.Install the system in an environment you feel comfortable testing in.
3.Proceed to examples/data/ClosureDesigns.php
Why ClosuresIn our previous examples, we implemented the intercepting filters, observers and adapter design patterns by calling other classes.
That can be overkill
To make things a little faster and easier to write, we can implement these same design patterns by having them call anonymous functions.
Our ClassWe are starting this example by creating a class with the 3 design patterns implemented.
Extend PVStaticObject Implemented the adapter design pattern
Implement Filters Implement Observer
Results
Very plain and basic, none of the filters or observers had any affect. Time to make this method a little bit sexier.
We have the design patterns implemented, so lets run the method once and see what result we get without using any of the patterns.
Arguments Filter
Now let’s add a filter to the arguments that are initially coming in. Filters with closures are just like regular filters except we have to add the option ‘type’ as a closure.
Define the closure Set the class to filter Set the method to filter
Add the closure Set the type to ‘closure’ Executes on this event
Arguments Filter Part 2Next we are going to take adding the anonymous function to the next level. Before we defined the function in a variable and passed it the method. Lets start adding the function directly into the method.
Class to Add Filter Method to add filter to
Create the anonymous function by passing it as the parameter
Give the filter a name
The type as ‘closure’ Add an event
Add the ObserverSimilar to how we added the anonymous function in the filter, we are going to add the anonymous function to the observer.
Set the name of the event Make up a name for the anonymous function
Create the anonymous functionSet the options type to closure
ResultsBefore we add the adapter design pattern, we are going to test the output when we run the method with the filters and observers.
We a little magic, we’ve made our output a little bit livelier.
Adapter and ClosureFor our final design pattern, we are going to completely override the method by using an adapter and a closure.
The class to add the adapter too The method to assign the adapter too
The anonymous function in place of the parameter
Set the option ‘type’ to ‘closure’
ResultsRemember from our other examples, adding the adapter will completely override the method. This means the execution of the code will never reach other design patterns. The result of adding the adapter will give us this:
Challenge!This is an optional challenge designed to give you a better understanding of the design patterns.
1. Look into the source code of the file PVFileManager in the core/util/PVFileManager.php.
2. Find the method for writing a file. Notice how it contains the ability to use adapters, filters and observers.
3. First apply filters and observers using anonymous functions to the method.
4. Then apply an adapter using an anonymous function and write the file out yourself.
API ReferenceFor a better understanding of the Design Patterns,
check out the api at the two links below.
PVStaticPatterns
PVPatterns
www.prodigyview.com
More Tutorials
For more tutorials, please visit:
http://www.prodigyview.com/tutorials