A collection of design patterns and idioms in Groovy based on Python Patterns.
The purpose of this repo is not only to learn the design patterns but also see their implementation in python which will help revise some of python and implement them in groovy which is my primary language of development currently. I will be adding the files mentioned in the README as the time goes on and keep it upto date with latest patterns implemented in the mentioned python repo as well as whatever new patterns I come acrros.
For best reference on design patterns using Groovy please refer documentation - [Groovy design patterns] [http://groovy.codehaus.org/Design+Patterns+with+Groovy]
Current Patterns:
Pattern | Description |
---|---|
3-tier | data<->business logic<->presentation separation (strict relationships) |
abstract_factory | use a generic function with specific factories |
adapter | adapt one interface to another using a whitelist |
borg | a singleton with shared-state among instances |
bridge | a client-provider middleman to soften interface changes |
builder | call many little discrete methods rather than having a huge number of constructor parameters |
catalog | general methods will call different specialized methods based on construction parameter |
chain | apply a chain of successive handlers to try and process the data |
command | bundle a command and arguments to call later |
composite | encapsulate and provide access to a number of different objects |
decorator | wrap functionality with other functionality in order to affect outputs |
facade | use one class as an API to a number of others |
factory_method | delegate a specialized function/method to create instances |
flyweight | transparently reuse existing instances of objects with similar/identical state |
graph_search | (graphing algorithms, not design patterns) |
mediator | an object that knows how to connect other objects and act as a proxy |
memento | generate an opaque token that can be used to go back to a previous state |
mvc | model<->view<->controller (non-strict relationships) |
observer | provide a callback for notification of events/changes to data |
pool | preinstantiate and maintain a group of instances of the same type |
prototype | use a factory and clones of a prototype for new instances (if instantiation is expensive) |
proxy | an object funnels operations to something else |
publish_subscribe | a source syndicates events/data to 0+ registered listeners |
state | logic is org'd into a discrete number of potential states and the next state that can be transitioned to |
strategy | selectable operations over the same data |
template | an object imposes a structure but takes pluggable components |
visitor | invoke a callback for all items of a collection |
chaining_method | continue callback next object method |