The easiest way to learn design patterns
The easiest way to learn design patterns
With C# code samples using .NET 6 templates
About the Book
Design patters are something that you will need to get familiar with as a programmer who works with object oriented languages. And this is primarily because they represent well-defined solutions to common software development problems. So, instead of thinking through all the details of your solution, you can simply check if any of the existing design patterns can be used. You won’t have to reinvent the wheel.
The main problem with design patterns is that they are not necessarily easy to learn. Many developers, especially the ones who don’t have a lot of software-building experience, struggle with them. But if you do struggle with them, it may prevent you from getting a programming job at a reputable organization. After all, recruiting managers often ask questions about design patterns. Otherwise, not knowing design patterns will make you less effective as a software developer, which will slow down your career progress.
The main reason why design patterns are so hard to learn is because of the way they are normally taught. Usually, if you pick pretty much any book on design patterns or open pretty much any online article about them, it would provide a collection of design patterns that you would need to go through. You would then have to got through each of them, try your best to understand the principles behind it and only then try to figure out how to apply it in a real-life situation.
It's a tedious process that doesn't always bring about the right results. It's not uncommon for software developers to memorize just a handful of design patterns that they have been using in their own projects. The remaining ones have been forgotten as soon as they've been learned. And it's hard to figure out which design pattern applies in which situation if you only remember a handful of them.
This book provides a different approach. It uses a methodology that makes it easy to learn design patterns. So, you no longer have to brute-force your way through them. The process of effective learning is not about memorization. It's about associations. You learn new things easily when you can clearly see how new facts related to your existing knowledge. And this is precisely the method that this book is built around.
You won't have to brute-force your way into design patterns. In fact, you won't even start with the design patterns. First, we will go through a list of common problems that software developers are required to solve. Those are the things that every software developer can associate with. Even if you haven't faced a particular type of a problem yet, you will still be able to easily understand its description. For each of these problems, we will go through the design patterns that can solve it. And for each one of them, you will go through its core principle and the description of how it can solve this type of a problem. Only then you will be invited to examine this particular design pattern in detail, so you can understand how to implement it in your own code.
This structure of the book also makes it valuable as a reference book. Even when you don't know or don't remember design patterns, looking them up becomes easy. What you need to find is a description of the type of a problem you are trying to solve. And then you will be able to follow it to find the actual design patterns that you can apply to solve it.
Therefore this book is not only an effective learning tool. It's also a reference book that's incredibly easy to navigate. It's been structured in such a way that you'll be able to find the right answer in seconds.
Bundles that include this book
Reader Testimonials
Bella Rabbit
Great Resource!
The title says it all! This book showed me the easiest way to learn design patterns… and it did so well because the book has its own methodology. Pick it up and find out precisely what I mean. Even with familiarity on the topic, it can teach a book a two. My friend here tried it out, who has experience in the subject, and she said she found some pointers unexpectedly useful. For her, it also had many design patterns that could be used as a quick reference. It’s navigation friendly.
Table of Contents
-
Introduction
- What design patterns are
- Why would you want to learn design patterns
- Why design patterns are hard to learn
- The goal of this book
- The structure of this book
-
About the author and his mission
- Getting in touch
- Helping to spread the word
- Part 1: SOLID principles and why they are important
-
1. Single responsibility principle
- What is single responsibility principle
- The importance of single responsibility principle
- The concept of class cohesion
- Conclusion
-
2. Open-closed principle
- What is open-closed principle
- Implementing the open-closed principle in C#
- Conclusion
-
3. Liskov substitution principle
- Implementing Liskov substitution principle in C#
- Conclusion
-
4. Interface segregation principle
- What is interface segregation principle
- Importance of interface segregation
- When NotImplementedException is appropriate
-
5. Dependency inversion principle
- What is dependency inversion principle
- Why dependency inversion principle is important
- Dependency inversion is not only useful in unit tests
- Part 2: The problems that design patterns are intended to solve
-
6. Not knowing what object implementations you’ll need ahead of time
- Suitable design patterns
-
7. Making several exact copies of a complex object
- Suitable design patterns
-
8. Using many instances of an object while keeping code running smoothly
- Suitable design patterns
-
9. Using the same single instance of an object throughout the application
- Suitable design patterns
-
10. Third party components aren’t directly compatible with your code
- Suitable design patterns
-
11. Adding new functionality to existing objects that cannot be modified
- Suitable design patterns
-
12. Accessing complex back-end logic from the presentation layer
- Suitable design patterns
-
13. User interface and business logic are developed separately
- Suitable design patterns
-
14. Building a complex object hierarchy
- Suitable design patterns
-
15. Implementing complex conditional logic
- Suitable design patterns
-
16. Multiple object instances of different types need to be able to communicate with each other
- Suitable design patterns
-
17. Multiple stages of processing are needed
- Suitable design patterns
-
18. The system is controlled by complex combinations of inputs
- Suitable design patterns
-
19. Ability to undo an action that has been applied
- Suitable design patterns
-
20. Ability to traverse a collection without knowing its underlying structure
- Suitable design patterns
-
21. Creating a family of related algorithms
- Suitable design patterns
- 22. Summary of the problems design patterns are intended to solve
- Part 3: Design patterns demonstrated in C#
- 23. Design pattern categories
- Creational design patterns
-
24. Factory Method
- Prerequisites
- Factory Method implementation example
- Benefits of using Factory Method
- Caveats of using Factory Method
-
25. Abstract Factory
- Prerequisites
- Abstract Factory implementation example
- Benefits of using Abstract Factory
- Caveats of using Abstract Factory
-
26. Builder
- Prerequisites
- Builder implementation example
- Benefits of using Builder
- Caveats of using Builder
-
27. Prototype
- Prerequisites
- Prototype implementation example
- Benefits of using Prototype
- Caveats of using Prototype
-
28. Singleton
- Prerequisites
- Singleton implementation example
- Benefits of using Singleton
- Caveats of using Singleton
- Structural design patterns
-
29. Adapter
- Prerequisites
- Adapter implementation example
- Benefits of using Adapter
- Caveats of using Adapter
-
30. Bridge
- Prerequisites
- Bridge implementation example
- Benefits of using Bridge
- Caveats of using Bridge
-
31. Composite
- Prerequisites
- Composite implementation example
- Benefits of using Composite
- Caveats of using Composite
-
32. Decorator
- Prerequisites
- Decorator implementation example
- Benefits of using Decorator
- Caveats of using Composite
-
33. Facade
- Prerequisites
- Facade implementation example
- Benefits of using Facade
- Caveats of using Facade
-
34. Flyweight
- Prerequisites
- Flyweight implementation example
- Benefits of using Flyweight
- Caveats of using Flyweight
-
35. Proxy
- Prerequisites
- Proxy implementation example
- Benefits of using Proxy
- Caveats of using Proxy
- Behavioral design patterns
-
36. Chain of Responsibility
- Prerequisites
- Chain of Responsibility implementation example
- Benefits of using Chain of Responsibility
- Caveats of using Chain of Responsibility
-
37. Command
- Prerequisites
- Command implementation example
- Benefits of using Command
- Caveats of using Command
-
38. Iterator
- Prerequisites
- Iterator implementation example
- Benefits of using Iterator
- Caveats of using Iterator
-
39. Mediator
- Prerequisites
- Mediator implementation example
- Benefits of using Mediator
- Caveats of using Mediator
-
40. Memento
- Prerequisites
- Memento implementation example
- Benefits of using Memento
- Caveats of using Memento
-
41. Observer
- Prerequisites
- Observer implementation example
- Benefits of using Observer
- Caveats of using Observer
-
42. State
- Prerequisites
- State implementation example
- Benefits of using State
- Caveats of using State
-
43. Strategy
- Prerequisites
- Strategy implementation example
- Benefits of using Strategy
- Caveats of using Strategy
-
44. Template Method
- Prerequisites
- Template Method implementation example
- Benefits of using Template Method
- Caveats of using Template Method
-
45. Visitor
- Prerequisites
- Visitor implementation example
- Benefits of using Visitor
- Caveats of using Visitor
- Epilogue
The Leanpub 60-day 100% Happiness Guarantee
Within 60 days of purchase you can get a 100% refund on any Leanpub purchase, in two clicks.
See full terms
Do Well. Do Good.
Authors have earned$11,817,855writing, publishing and selling on Leanpub, earning 80% royalties while saving up to 25 million pounds of CO2 and up to 46,000 trees.
Learn more about writing on Leanpub
Free Updates. DRM Free.
If you buy a Leanpub book, you get free updates for as long as the author updates the book! Many authors use Leanpub to publish their books in-progress, while they are writing them. All readers get free updates, regardless of when they bought the book or how much they paid (including free).
Most Leanpub books are available in PDF (for computers) and EPUB (for phones, tablets and Kindle). The formats that a book includes are shown at the top right corner of this page.
Finally, Leanpub books don't have any DRM copy-protection nonsense, so you can easily read them on any supported device.
Learn more about Leanpub's ebook formats and where to read them
Top Books
Stratospheric
Tom Hombergs, Björn Wilmsmann, and Philip RiecksFrom Zero to Production with Spring Boot and AWS. All you need to know to get a Spring Boot application into production with AWS. No previous AWS knowledge required.
Go to stratospheric.dev for a tour of the contents.
C++20 - The Complete Guide
Nicolai M. JosuttisAll new language and library features of C++20 (for those who know previous C++ versions).
The book presents all new language and library features of C++20. Learn how this impacts day-to-day programming, to benefit in practice, to combine new features, and to avoid all new traps.
Buy early, pay less, free updates.
Other books:
OpenIntro Statistics
David Diez, Christopher Barr, Mine Cetinkaya-Rundel, and OpenIntroA complete foundation for Statistics, also serving as a foundation for Data Science.
Leanpub revenue supports OpenIntro (US-based nonprofit) so we can provide free desk copies to teachers interested in using OpenIntro Statistics in the classroom and expand the project to support free textbooks in other subjects.
More resources: openintro.org.
node-opcua by example
Etienne RossignonGet the best out of node-opcua through a set of documented examples by the author himself that will allow you to create stunning OPCUA Servers or Clients.
Advanced Web Application Architecture
Matthias NobackThe missing manual for making your web applications future-proof
Jetpack Compose internals
Jorge CastilloJetpack Compose is the future of Android UI. Master how it works internally and become a more efficient developer with it. You'll also find it valuable if you are not an Android dev. This book provides all the details to understand how the Compose compiler & runtime work, and how to create a client library using them.
Ansible for DevOps
Jeff GeerlingAnsible is a simple, but powerful, server and configuration management tool. Learn to use Ansible effectively, whether you manage one server—or thousands.
R Programming for Data Science
Roger D. PengThis book brings the fundamentals of R programming to you, using the same material developed as part of the industry-leading Johns Hopkins Data Science Specialization. The skills taught in this book will lay the foundation for you to begin your journey learning data science. Printed copies of this book are available through Lulu.
Thinking with Types
Sandy MaguireThis book aims to be the comprehensive manual for type-level programming. It's about getting you from here to there---from a competent Haskell programmer to one who convinces the compiler to do their work for them.
Maîtriser Apache JMeter
Philippe Mouawad, Bruno Demion (Milamber), and Antonio Gomes RodriguesToute la puissance d'Apache JMeter expliquée par ses commiteurs et utilisateurs experts. De l'intégration continue en passant par le Cloud, vous découvrirez comment intégrer JMeter à vos processus "Agile" et Devops.
If you're looking for the newer english version of this book, go to Master JMeter : From load testing to DevOps
Top Bundles
- #1
CCIE Service Provider Ultimate Study Bundle
2 Books
Piotr Jablonski, Lukasz Bromirski, and Nick Russo have joined forces to deliver the only CCIE Service Provider training resource you'll ever need. This bundle contains a detailed and challenging collection of workbook labs, plus an extensively detailed technical reference guide. All of us have earned the CCIE Service Provider certification... - #3
Software Architecture
2 Books
"Software Architecture for Developers" is a practical and pragmatic guide to modern, lightweight software architecture, specifically aimed at developers. You'll learn:The essence of software architecture.Why the software architecture role should include coding, coaching and collaboration.The things that you really need to think about before... - #4
Pattern-Oriented Memory Forensics and Malware Detection
2 Books
This training bundle for security engineers and researchers, malware and memory forensics analysts includes two accelerated training courses for Windows memory dump analysis using WinDbg. It is also useful for technical support and escalation engineers who analyze memory dumps from complex software environments and need to check for possible... - #5
Practical FP in Scala + Functional event-driven architecture
2 Books
Practical FP in Scala (A hands-on approach) & Functional event-driven architecture, aka FEDA, (Powered by Scala 3), together as a bundle! The content of PFP in Scala is a requirement to understand FEDA so why not take advantage of this bundle!? - #10
Cloud Architect: Transform Technology and Organization
2 Books
Architects don't just recite product names and features. They understand the options, decisions, and trade-offs behind them. They earn credibility and maintain authenticity by connecting the penthouse with the engine room. Get two essential books that redefine the role of the software and IT architect at one low price:37 Things One Architect...