There’re many articles about design patterns that provide a good amount of information on either a comparison between different design patterns or on how to get started, and some are really good and can help you get a grasp of the theory and get you started. But some of them fall short in providing examples (real-life examples) for you to play around with them. If you are like me (a very visual and by example kind of learner) these articles may not be enough for you to feel confident to use on your projects.
Another is that there are many different flavors of each design pattern and this makes it even harder for you to select the best design pattern for your project. These articles may help you up get started but then you might find your self searching for other examples that not necessary follow the same flavor that you already started your project with.
With this article, I want to provide a centralized source of examples of different design patterns and flavors. Initially I added three different design patterns and on the follow-up post I’ll add two flavors (one for
MVVM and one for
I wrote the same app using three different design patterns (
The app uses
URLSession to get jobs using GitHub Jobs API and either uses the user location or a location input by the user. The request uses the location and the input text to get available jobs for that location.
- API Client
- Location Services
- Image Handler (Image loader and caching)
- Job Search/List
- Job Detail
- Job Description Detail
The different design patterns approach is separated into different branches:
All approaches use an environment singleton. Only the
MVVM has an alternate approach that uses dependency injection (DI) with protocols. They all have unit tests, except for
As mentioned above, the next article will have two new flavors (Semi-Reactive