Writing good object-oriented software today can benefit greatly from the use of design patterns. These patterns have evolved and been refined to solve consistent problems that routinely pop up when writing software. As with most quality frameworks, the Spring framework leverages many design patterns and integrates them into the consumption of the framework as well.
So in this article, I will discover those design patterns .
What are the design pattern ?
Before we begin talking about the design patterns that we’re going to use with the spring framework, we need to talk about what they are. And really what they come down to, is that these are a set of best practices for solutions to common problems, designed with good object-oriented programming in mind. And the solution and application or implementation of it. o a good, well defined design pattern not only shows you the solution to the problem, the implementation of that solution, but prescribes how to use it to maximize its value.
Why do we car about design pattern ?
Now you may ask: why do we care as developers about these design patterns? And the answer comes down to that they provide a common answer to common problems. There’s no need to solve the same problem over and over again, after all that’s just an exercise in futility, and there’s no reason to recreate the wheel it’s already been done before. And these design patterns are proven implementations that you can leverage for free. And the industry as a whole has adopted them, and that adds even more value to them because other developers look at them and understand them immediately, which makes reading code for them that much better. Now there’s some value to developers as well that I just talked about. Now these are trusted and well-tested patterns that makes determining the solution and solving the problem that much easier. Because these have already been tested, and these patterns have already been defined you can get to market faster because you don’t have to create a new algorithm. And they’re easier to explain your code when you use patterns because other developers will recognize them, and because they’re written with highly structured object-oriented programming you can explain your code in a way that makes sense to others doing object-oriented development. And because you’re using a pattern and you haven’t recreated something from scratch its easier to read your own code later, which makes fixing issues, as well as debugging problems, that much easier later. So leverage design patterns, leverage them for your own benefit, and use these trusted solutions to do your job and to do it well.
The patterns of the Spring Framework
Actually the framework itself is based on design patterns. And from its core, patterns play a role in almost every aspect of the framework. Operationally, Spring itself works using patterns but also supports your patterns in the process.
- Inversion of Control Pattern : is one of the major patterns that is used by the Spring Framework. And really in my opinion, this is the big pattern at play. This is the big one, so to speak. The one that matters more than anything else. The entire runtime of the Spring framework is based entirely on Inversion of Control.
- Benefit of Inversion of Control Pattern :
- Inversion of Control improves testability,
- Decreases coupling, enforces coding to an interface
- Benefit of Inversion of Control Pattern :
- The Proxy Pattern : is at play in Spring and every object managed by Spring is wrapped in a proxy since 4.0. This means every object that you create and configure to be managed by the platform, Spring wraps one or more proxies around that. And these proxies bring major caveats to the operation of Spring, which we will talk about when we get to the Proxy Pattern itself. But these are things that you really have to pay attention to because the expected behavior in a non-proxied class may be different than a proxied class. So you really have to understand how this pattern changes the behavior of a Spring application.
- Now the power of the Proxy Pattern is that :
- It allows additional behaviors to be leveraged throughout the framework. And many times operations that you’re doing, the proxies are really what are adding the quote unquote magic that Spring brings to the table. And this is where this pattern becomes so important for you to understand.
- Now the power of the Proxy Pattern is that :
- Factory Pattern : it’s probably the most common and within Spring itself the Factory Pattern is heavily used. The IoC container, so the container that actually handles inversion of control is itself a factory. And this factory’s heavily leveraging the start up as well as the run time operation of the Spring Framework. Now there’s first class support for factories in your code but it’s java so of course it’s an object oriented language, factories are prevalent. But Spring actually has put legacy code in place so that you can bring other factories that you don’t own into your IoC container.
- Singleton and prototype patterns : now I’ve talked again about singleton and prototype patterns being at play in Spring. But one thing to note is that most of your objects, and in many cases all of your objects that are configured for the Spring Framework leverage one of these two patterns. And the singleton pattern is the most popular mainly because it’s the default. If you want a bean to actually be a prototype you have to tell Spring make this a prototype otherwise it’s a singleton. Now, one thing to note when we talk about the singleton pattern and I’ll bring it up again is that the singleton and Spring is not a traditional singleton implementation. But essentially they work the exact same because Spring is handling the construction so they are handing you a bean that acts as a singleton within your run time of your application. Template Pattern : now, one of my favorite patterns and the one that I really, really love about the Spring framework is the Template Pattern. The Template Pattern is used widely when making remote calls. And the two most common that most developers will see is JDBC and REST. Both of those have a specific template that allow you to make that remote call. Now, many third parties leverage the template pattern to fit into the Spring framework in order to remove boiler plate code for using their tooling. And that’s very, very important to know that this pattern of using templates for remote calls is encouraged and it’s actually used by many third parties to operate the same way that Spring does.
- Model-View-Controller Pattern : now finally I want to talk about the Model-View-Controller Pattern. The entire web framework of Spring is based on the Model-View-Controller Pattern. Now this applies to both traditional webpages as well as RESTful services.One thing to note about this is just like the IoC Pattern this is not a classic pattern from the gang of four. But it is nonetheless very, very important to Spring and we’re going to talk about patterns in general, not just gang of four patterns throughout this article . So the mvc pattern is extremely important to Spring and we’re going to spend some time with it.
So we’ve spent quite a bit of time talking about some design patterns, and finally, before I let you go, I want to say thank you. Your time is very valuable, and the fact that you would spend it reading this article with me actually means a lot to me .
Comments