We may earn an affiliate commission when you visit our partners.
Course image
Mark Farragher

In 1994 the "Gang of Four" published a book titled "Design Patterns: Elements of Reusable Object-Oriented Software". This book contains 23 fundamental software design patterns. It is regarded as the standard reference manual for object-oriented design theory and practice.

In this course I will teach you the first 12 design patterns. These are all 5 creational- and all 7 structural design patterns. You use these patterns to create new objects efficiently and to create structure in your application architecture.

Read more

In 1994 the "Gang of Four" published a book titled "Design Patterns: Elements of Reusable Object-Oriented Software". This book contains 23 fundamental software design patterns. It is regarded as the standard reference manual for object-oriented design theory and practice.

In this course I will teach you the first 12 design patterns. These are all 5 creational- and all 7 structural design patterns. You use these patterns to create new objects efficiently and to create structure in your application architecture.

By the end of the course you will be fluent in all 12 design patterns. With this knowledge you will be well on your way to become a Senior Application Architect.

Why should you take this course?

You should take this course if you are a beginner or intermediate C# developer and want to take your career to the next level. Some of the patterns (e.g. 'Bridge') might sound very complicated, but all of my lectures are very easy to follow, and I explain all topics with clear code and many instructive diagrams. You'll have no trouble following along.

Or maybe you're working on the application architecture of a large project, and you need to create a robust design that is instantly clear to your team members? The patterns in this course will help you immensely.

Or maybe you're preparing for a C# related job interview? This course will give you an excellent foundation to answer any software architecture questions they might throw at you.

Enroll now

What's inside

Learning objectives

  • Learn all 12 structural and creational design patterns
  • What's up with singletons?
  • The benefit of the prototype pattern
  • Reduce memory with a flyweight
  • Expose subsystems with a facade
  • Wrap legacy components with the adapter pattern
  • The pros and cons of the composite child management interface
  • Multi-step object construction with the builder pattern
  • ... and much more!

Syllabus

Introduction

In this lecture I explain how this course is organized and I describe each of the upcoming sections in detail.

In this lecture we're going to take a closer look at Design Patterns, and what they can do for you.

Read more

Many lectures in this course contain source code examples. Feel free to download the code and follow along. And here's the good news: it doesn't matter if you have a Window, Mac or Linux computer. The code will run on all three operating systems.

In this lecture I demonstrate how my solutions and projects run on all operating systems. I will show you how to build and run the source code on a Mac, on Linux and in Visual Studio running on Windows 8.

At the end of this lecture you will have learned that .NET code is portable and can run on at least five different operating systems.

The abstract factory pattern is ideal for constructing families of interrelated products. The pattern provides factories for constructing new objects and guarantees that each factory can only create objects that are compatible.

In this lecture I'll show you how the pattern works and how you can implement it in your own code. I will also demonstrate an example program that uses abstract factories to simulate an ecosystem in Africa and Australia.

The builder pattern is intended for constructing aggregate objects. These are objects that consist of a collection of internal parts. The pattern makes it very easy to build new objects by adding parts one at a time.

In this lecture I will explain the pattern and teach you how to implement it in your own code. I will also demonstrate an application that automates a fast-food restaurant and uses the builder pattern to assemble burger- and kids menus.

The factory method pattern provides an abstract virtual object constructor that you can override in subclasses. This gives you full control over the object creation process, in contrast to the 'new' operator which always creates a new instance of the given type.

In this lecture I will demonstrate the pattern and show you how to implement it in your own code. As an example I'll show you some code that uses the factory method pattern to automate a plastic toy factory.

The prototype design pattern uses a pre-built prototype object to quickly create new objects. This can be very useful if the object creation process is expensive in terms of time and memory.

In this lecture I'll show you how the pattern works and how you can implement it in your own code. I will also demonstrate an image generation program that uses a prototype object to quickly create a collection of related images.

The singleton pattern ensures that there can only ever be one single instance of a given class. This can be very useful for providing system-wide access to some kind of application support service.

In this lecture I'll show you how you can implement the pattern in your own code, and I will explain how this pattern became the most abused design pattern in the world. I will also show you how to build a simple diagnostic logger with the singleton pattern.

Congratulations on finishing this section. This is a recap of what we have learned.

The adapter pattern lets you incorporate a legacy component into your application architecture that no longer supports the legacy interface. The pattern provides a special adapter class that can communicate both with the application architecture and with the legacy component.

I will show you a legacy stock price history library that uses decimal arrays, and then demonstrate how the adapter pattern can be used to make this library compatible with an application architecture that uses DataTables everywhere.

If you try to combine two orthogonal class hierarchies together, your application architecture will quickly devolve into a mess of duplicated classes spread out all over your object hierarchy. The bridge pattern solves this problem by keeping the two hierarchies completely separate, and connecting them with a single bridge.

I will show you how you can use the bridge pattern to create a very elegant and compact charting library that draws lines, squares and rectangles on various output devices.

The composite pattern is intended for building tree-like data structures. It allows you to nest component classes inside other component classes to build a tree structure.

I will demonstrate the pattern by building a simple web rendering library that output the correct HTML code for simple web documents.

The decorator pattern lets you enhance the functionality of an existing object by layering an arbitrary number of decorators objects on top of each class method. Each decorator can add custom enhancements to the default functionality.

I will demonstrate the pattern by building a simple program that calculates the price of pizza's with various extra toppings.

The facade pattern reduces the learning curve of a complex subsystem by layering a high level interface on top of the low level subsystem interface.

I will demonstrate the pattern by showing you a complex banking subsystem for managing bank accounts and buying equity on the stock market. I will build a facade that implements a mutual fund with a single high level 'Buy' method.

The flyweight pattern allows you to create very large data structures, by elegantly sharing object instances between nodes in the data structure. For example, the pattern can be used to reduce the number of leaf object instances in the composite pattern.

I will show you a simple web rendering library that loads images to display in a web page. The library uses the flyweight pattern to prevent the same image from being loaded twice.

The proxy pattern allows you to lazily instantiate an object at the last possible moment. Another use is with remoting, where the proxy acts as a surrogate for a remote object. And lastly you can use proxies to wrap access control code around an existing object.

I will show you how to use a proxy to implement a simple rate limiter around a web service API. The rate limiter restricts the number of API calls to one per second.

Congratulations on finishing this section. This is a recap of what we have learned.

Traffic lights

Read about what's good
what should give you pause
and possible dealbreakers
Explores creational and structural design patterns, which are essential for building scalable and maintainable applications using object-oriented principles
Uses C#, a widely-used language in the .NET ecosystem, making the design patterns directly applicable to real-world projects and enterprise-level applications
Covers the "Gang of Four" design patterns, which are considered foundational knowledge for software architects and senior developers
Includes downloadable source code examples that run on Windows, Mac, and Linux, allowing learners to practice and implement the patterns regardless of their operating system
Teaches design patterns such as Adapter, Bridge, and Composite, which are useful for integrating legacy systems and building complex user interfaces
Focuses on design patterns that help create structure in application architecture, which is beneficial for developers working on large projects

Save this course

Create your own learning path. Save this course to your list so you can find it easily later.
Save

Reviews summary

C# design patterns for career growth

According to learners, this course offers a clear and practical introduction to Structural and Creational Design Patterns specifically for C#. Students frequently highlight the instructor's ability to make complex topics easy to understand through clear explanations and instructive diagrams. The code examples are often mentioned as being particularly helpful and practical for grasping the concepts. While providing a solid foundation for those looking to boost their career or prepare for interviews, some feedback suggests that more experienced developers seeking very deep dives into advanced nuances might find it less comprehensive.
Well-organized flow covering key patterns.
"The course structure, moving from creational to structural, was logical and easy to follow."
"I liked the introduction and recap for each section."
"The organization of topics made learning efficient."
"A well-paced course that covers the core patterns effectively."
Builds understanding for career advancement.
"This course provided me with a solid foundation in design patterns needed for my career."
"Helped me understand how to apply patterns in real-world C# development."
"Great for preparing for technical interviews requiring pattern knowledge."
"Boosted my confidence in discussing software architecture."
Practical, well-demonstrated code samples.
"The code examples for each pattern were practical and helped solidify my understanding."
"Running the provided code alongside the lectures was invaluable."
"Examples like the banking facade or the web rendering flyweight were very illustrative."
"The demonstrations made it easy to see how the patterns are implemented in C#."
Complex patterns made easy to understand.
"The instructor explains complex design patterns in a way that's very easy to follow."
"The diagrams and explanations clarify abstract concepts effectively."
"I really appreciated how clear the lectures were on each pattern."
"Excellent at breaking down the patterns into manageable parts."
Some desire more advanced coverage.
"While great for an introduction, I wished for a bit more advanced detail on some patterns."
"Could benefit from discussing more complex scenarios or variations."
"Experienced developers might find some parts too basic."
"A deeper dive into implementation nuances would be helpful."

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in Boost Your C# With Structural And Creational Design Patterns with these activities:
Review Object-Oriented Programming (OOP) Principles
Solidify your understanding of OOP principles to better grasp the underlying concepts behind design patterns.
Show steps
  • Review the core concepts of OOP.
  • Practice implementing classes and objects.
  • Study examples of inheritance and polymorphism.
Review 'Head First Design Patterns'
Gain a different perspective on design patterns through a more visual and engaging learning experience.
Show steps
  • Read the chapters related to the course's design patterns.
  • Compare the book's explanations with the course content.
  • Note the differences in approach and examples.
Review 'Design Patterns: Elements of Reusable Object-Oriented Software'
Deepen your understanding of design patterns by studying the original source material.
Show steps
  • Read the chapters related to creational and structural patterns.
  • Compare the book's explanations with the course content.
  • Try implementing the patterns in C# based on the book's examples.
Four other activities
Expand to see all activities and additional details
Show all seven activities
Create a Blog Post Explaining a Design Pattern
Solidify your understanding by explaining a design pattern in your own words, targeting an audience of fellow developers.
Show steps
  • Choose a design pattern from the course.
  • Research the pattern and its applications.
  • Write a clear and concise explanation of the pattern.
  • Include code examples and diagrams to illustrate the pattern.
  • Publish your blog post on a platform like Medium or your own website.
Implement Design Patterns from Scratch
Reinforce your understanding by implementing the design patterns covered in the course without referring to the course materials.
Show steps
  • Choose a design pattern from the course.
  • Implement the pattern in C# from memory.
  • Compare your implementation with the course examples.
  • Refactor your code for clarity and efficiency.
Design a System Using Design Patterns
Apply your knowledge by designing a small system that utilizes several of the design patterns learned in the course.
Show steps
  • Choose a problem domain for your system.
  • Identify the design patterns that are suitable for the system's architecture.
  • Implement the system in C# using the chosen patterns.
  • Document your design choices and rationale.
Answer Questions on Design Patterns Forums
Reinforce your understanding by helping others learn about design patterns.
Show steps
  • Find online forums or communities related to C# and design patterns.
  • Browse the forums for questions related to the patterns covered in the course.
  • Provide clear and helpful answers to the questions.
  • Explain your reasoning and provide code examples where appropriate.

Career center

Learners who complete Boost Your C# With Structural And Creational Design Patterns will develop knowledge and skills that may be useful to these careers:
Software Architect
A software architect is responsible for making high-level design choices and dictating technical standards, including software coding standards, tools, and platforms. This course directly prepares you for some of the complex architectural decisions you will face. By the end of the course, you will be fluent in all 12 structural and creational design patterns, providing you with the knowledge to become a senior application architect. Software architects often need to produce robust designs that are instantly clear to team members, and the patterns explored in this course will help you immensely.
Application Developer
Application developers design, build, and maintain software applications. This course helps application developers to write better code. The course focuses on structural and creational design patterns. These patterns help create new objects efficiently and to create structure in your application architecture. By the end of the course, you will be fluent in all 12 structural and creational design patterns. This can help you to become a senior application architect. Someone who is working on the application architecture of a large project, and needs to create a robust design that is instantly clear to team members, will find the patterns in this course to be immensely helpful.
Software Engineer
A software engineer designs, develops, tests, and evaluates software systems and applications. This course directly applies to the work of a software engineer by teaching how to create structure in your application architecture. By the end of the course, you will be fluent in all 12 structural and creational design patterns. With this knowledge you will be well on your way to becoming a Senior Application Architect. Learning about design patterns will give you an excellent foundation with which to answer any software architecture questions. Software engineers looking to enhance their understanding of design principles should definitely consider this course.
Technical Lead
Technical leads guide development teams and ensure the technical quality of their work. This course can be quite valuable for a technical lead, because it focuses on structural and creational design patterns. These patterns help create new objects efficiently and create structure in an application architecture, and by the end of the course, you will be fluent in all 12 patterns. With this knowledge you may be on your way to becoming a Senior Application Architect. The patterns in this course may help technical leads immensely when they are working on the application architecture of a large project and need to create a robust design that is instantly clear to team members.
Software Developer
Software developers write and maintain code for various software applications. This course is specifically aimed at helping software developers advance their careers. The course teaches structural and creational design patterns so you can create new objects efficiently and to create structure in your application architecture. By the end of the course, you will be fluent in all 12 structural and creational design patterns. This knowledge may help you become a senior application architect. Taking this course can improve a software developer's ability to create robust designs that are instantly clear to team members.
Principal Engineer
Principal engineers are technical leaders and experts within their organizations. They are responsible for setting technical direction and ensuring that projects are aligned with the company's overall strategy. This course may provide valuable knowledge for a principal engineer. By the end of the course, you will be fluent in all 12 structural and creational design patterns. This allows you to create new objects efficiently and to create structure in your application architecture. Principal engineers who are working on the application architecture of a large project, and need to create a robust design that is instantly clear to team members, should definitely consider the patterns covered in this course.
Systems Architect
Systems architects are responsible for the overall design and architecture of computer systems. The course focuses on structural and creational design patterns so you can create new objects efficiently and to create structure in your application architecture. By the end of the course, you will be fluent in all 12 structural and creational design patterns. Learning these patterns may help you become a senior application architect. If you are working on the application architecture of a large project, and you need to create a robust design that is instantly clear to team members, you will find the patterns in this course immensely helpful.
Team Lead
Team leads are responsible for managing and guiding a team of developers. This course may be useful for a team lead. Team leads may like to provide training to their team regarding structural and creational design patterns. By the end of the course, you will be fluent in all 12 structural and creational design patterns. This allows you to create new objects efficiently and to create structure in your application architecture. Team leads who are working on the application architecture of a large project can use this knowledge to create a robust design that is instantly clear to team members.
Backend Developer
Backend developers are responsible for server-side logic and database management. The course may be useful to backend developers interested in improving the structure and efficiency of their code. The course teaches structural and creational design patterns so you can create new objects efficiently and to create structure in your application architecture. By the end of the course, you will be fluent in all 12 structural and creational design patterns, which are very relevant to backend development. If you are working on the application architecture of a large project, and need to create a robust design that is instantly clear to team members, the patterns in this course may help you immensely.
Full-Stack Developer
Full stack developers work on both the front-end and back-end of web applications. This course may be valuable for full stack developers who want to improve their understanding of design patterns. This course teaches structural and creational design patterns so you can create new objects efficiently and to create structure in your application architecture. By the end of the course, you will be fluent in all 12 structural and creational design patterns. This knowledge may help you become a senior application architect. This course may help any full stack developer working on the application architecture of a large project and needing to create a robust design that is instantly clear to team members.
Cloud Architect
A cloud architect is responsible for designing and implementing cloud computing solutions. Cloud architects often need to design scalable and robust systems. This course may be useful because it focuses on structural and creational design patterns. The patterns help create new objects efficiently and create structure in application architecture. By the end of the course, you will be fluent in all 12 patterns. With this knowledge you may be on your way to becoming a Senior Application Architect. The patterns in this course may help Cloud Architects immensely when they are working on the application architecture of a large project and need to create a robust design that is instantly clear to team members.
DevOps Engineer
DevOps engineers focus on automating and streamlining software development and deployment processes. A DevOps Engineer works to improve efficiency and collaboration. This course may be helpful because it teaches structural and creational design patterns. These patterns help create new objects efficiently and to create structure in an application architecture. By the end of the course, you will be fluent in all 12 patterns. The patterns in this course may help DevOps engineers immensely when designing and implementing automated systems and infrastructure.
Quality Assurance Engineer
Quality assurance engineers are responsible for testing software and ensuring its quality. The course may be helpful for a quality assurance engineer, because knowledge of design patterns can aid in understanding the structure of the code being tested. By the end of the course, you will be fluent in all 12 structural and creational design patterns, providing a foundation for answering software architecture questions. Quality assurance engineers who are preparing for job interviews may find that this course gives them an excellent foundation. The patterns in this course may help quality assurance engineers immensely when assessing the quality and maintainability of code.
Data Engineer
Data engineers design, build, and manage data pipelines and infrastructure. While this role is heavily focused on data processing, understanding design patterns may be useful. This course teaches structural and creational design patterns so you can create new objects efficiently and to create structure in your application architecture. By the end of the course, you will be fluent in all 12 structural and creational design patterns. This knowledge may help you become a senior application architect. If you are working on the application architecture of a large project the patterns in this course may help you create robust designs. Data Engineer roles may require a masters degree.
Database Administrator
Database administrators are responsible for managing and maintaining databases. Although this role is highly specialized, understanding design patterns may be beneficial. This course may be useful to Database Administrators interested in design patterns. By the end of the course, you will be fluent in all 12 structural and creational design patterns, which is useful in any software development role. If you are working on the application architecture of a large project, and need to create a robust design that is instantly clear to team members, you will find the patterns in this course may be helpful.

Reading list

We've selected two books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in Boost Your C# With Structural And Creational Design Patterns.
Is the seminal work on design patterns, often referred to as the 'Gang of Four' book. It provides detailed explanations and examples of the 23 fundamental design patterns. While the course covers 12 patterns, this book offers a broader perspective and deeper understanding. It is highly recommended as a reference for any serious software architect or developer.
Offers a more approachable and engaging introduction to design patterns compared to the 'Gang of Four' book. It uses a visual and interactive style to explain the concepts. While it may not be as comprehensive, it can be a great resource for beginners or those who prefer a less formal learning style. It provides a solid foundation for understanding the patterns covered in the course.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Similar courses are unavailable at this time. Please try again later.
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2025 OpenCourser