We may earn an affiliate commission when you visit our partners.
Course image
Coffee Powered Crew

Course Overview

This course starts with SOLID Design Principles in Java. It will then provide a comprehensive introduction to Java Design patterns with practical, hands on exercises.

What are SOLID Design Principles?

Read more

Course Overview

This course starts with SOLID Design Principles in Java. It will then provide a comprehensive introduction to Java Design patterns with practical, hands on exercises.

What are SOLID Design Principles?

SOLID design principles are almost a mandatory skill for every Java developer. These principles enable you to write most reusable & clean Java code in your projects.

You'll learn SOLID Principles which are:

Single Responsibility Principle

Open-Closed Principle

Liskov Substitution Principle

Interface Segregation Principle

Dependency Inversion Principle

All these principles are explained in detail and you'll refactor existing Java code and apply these principles in hands on exercise along with me.

Then we move on to Java Design Patterns.

To learn about the design patterns using Java programming language we'll discuss:

  • Learn what kind of problems are solved by each design pattern.

  • Discuss various roles in the design pattern using UML diagrams.

  • We'll use UML of example that we are going to solve as well as UMLs from gang of four book

  • Discuss how the design pattern is applied in the example & how various parts fit together.

  • Hands on example using Java in Eclipse IDE that uses the design pattern.

  • Various design & implementation considerations for every design pattern.

  • Discuss how the design pattern varies from another similar pattern.

  • See where a design pattern is used in real life.

This course covers all the classic design patterns from the Gang of Four (GoF) book. In addition we'll discuss few newer design patterns that are used in modern software development. We'll discuss how a pattern can be implemented in various ways & how we can tailor them to be used with Java language.

This course is the Most Comprehensive course on Java Design Patterns that you can find.

So, what are Design Patterns & why should you care?

Design patterns represent solutions to common problems, which you face while doing programming. These solutions are reusable and can solve a wide variety of problems. These became popular with the release of classic book on the subject "Elements of Reusable Object-Oriented Software" writtern by Erich Gamma, John Vlissides, Ralph Johnson and Richard Helm (these authors are known as Gang of Four and so the common abbreviation GoF book :) ) One problem while studying this book as a Java developer is that the authors are using C++ to demonstrate a pattern, which was the most popular & widely used programming language at the time. So you'll see examples using C++ language features like pointers, copy constructors etc. which do not translate easily to Java. This course will help greatly in that aspect. We'll study each design pattern using Java to its full potential.

What is covered in this course?

This course covers SOLID Design Principles and 26 design patterns in all. We'll cover following:

  • SOLID Design Principles: Learn about Single Responsibility, Open-Closed, Liskov substitution, Interface segregation & Dependency Inversion principles.

  • Creational Design Patterns: Simple Factory, Abstract Factory, Factory Method, Singleton, Builder, Prototype & Object Pool

  • Structural Design Patterns: Object & Class Adapters, Decorator, Bridge, Facade, Static & Dynamic Proxy, Flyweight & Composite

  • Behavioral Design Patterns: Chain of Responsibility, Command, Interpreter, Mediator, Iterator, Memento, Observer, State, Strategy, Template Method, Visitor, & Null Object

Each design patterns is also implemented in a follow along coding lecture.

How the Course is Structured?

We focus on live coding along with theory. Each design is implemented in a live coding session (which you can follow along) as well as discussed with UML & slides. After studing a section you'll know almost everything about the design pattern.

This course is created with focus on being used as a reference. So each design pattern is discussed in it's own section with a separated lecture for each aspect of the design pattern. Each section is organized as following lectures: 1. Introduction - This lecture introduces pattern, a problem that it solves & a formal UML diagram 2. Implementation Steps - This lecture will discuss how you'll implement this pattern in Java. 3. Example UML - We discuss the UML of the hands on problem we're going to solve. 4. Implementation - In this lecture we'll implement the design pattern in Java using Eclipse IDE 5. Implementation & Design Considerations - Some important points about performance, variations & practical advice on using the pattern 6. Real World Example - In this lecture we'll see how the pattern is used in real life by Java's own class library & popular frameworks like Spring, JSF 7. Comparison with Similar pattern - See how the pattern is different than another similar pattern. 8. Pitfalls - Many pattern have some drawbacks. This lecture will show you what those are. 9. Summary - This lecture will summarise all the information about the pattern.

As you can see, by breaking a single design pattern in smaller topics, you can easily watch only those parts that you need in future.

What is provided with the Course?

  • We have provided all code samples from the hands on lectures. You can download the starter code & follow along or you can download the finished code to study on your own.

  • All UML diagram with description of each role in the design pattern is provided as PDF in summary video. These slides are enough to quickly revise design pattern structure.

  • A PDF guide to all design pattern summaries with code samples and UML diagrams.

Who should take this Course?

  • Beginner as well as experience Developers.

  • Software Designers & Architects.

Enroll now

What's inside

Learning objectives

  • Master 26 design patterns including 23 design patterns of gang of four & other new modern design patterns
  • Master the solid design principles using java with hands on examples along with design patterns
  • Get a complete understanding of java design patterns & understand where to use them in java code
  • Learn the differences between competing design patterns to choose correct solution to your problem
  • Get real world examples of design patterns usage with hands on projects for every design pattern
  • Become senior java developer by learning about design patterns and solid design principles
  • Understand & implement all creational, structural & behavioral gang of four design patterns using java
  • Understand & implement null object, object pool design patterns using java
  • Comprehensive knowledge about limitations, comparisons, real world usage & hand on examples of design patterns using java

Syllabus

Learn about the famous SOLID design principles. Although not design patterns themselves these are some useful principles which are fundamental to any good design.
Read more
Section Introduction

Learn about the Single Responsibility Principle here. This is the first one from SOLID design principles.

Let's try out the Single Responsibility principle with some java code.

The second principle from SOLID design principles.

Try out the open-closed principle in a Java hands on example.

Let's learn about Liskov substitution in this lecture.

We'll see the famous example of Liskov Substitution principle.

This easy to follow but important principle is explained in this lecture.

See how interface segregation can be applied in Java code.

The famous DI principle.

Let's try out the dependency inversion ourselves in this Java hands on example.

Let's test your knowledge about SOLID principles in this quiz.

Introduction
Design Patterns - Introduction

Let's test your knowledge of categories of design patterns. In case you get any of these wrong, don't worry! You can always go back and watch the lecture again to revise.

Let's start with creational design patterns first.
Creational Patterns - Introduction
In this section we're going to learn about builder design pattern.

In this video we'll introduce the builder design pattern. Builder is one of the most easy & useful creational design patterns. It can be used with legacy code as well as new code. 

Let's talk about the typical steps you'd follow when implementing builder design pattern.

In this video we'll go over the UML diagram of the example which we're going to implement in next video. This video will clarify role of each class we'll be either using or implementing ourselves.

Let' s implement builder design pattern now in Java. In this video we are going to try out one way to implement this pattern. 

In this video we're going to implement builder in another fashion. n fact this is the way you'll often see builder used in real life projects.

In this video we're going to look at some points you should consider while designing & implementing this design pattern.

Builder - Examples

Now let's compare builder pattern with Prototype design pattern.

This video discusses short comings of builder design pattern.

In this video we will discuss summary of builder design pattern

Let's test your knowledge of the builder design pattern. In case you get some of these wrong, don't worry! You can go back and watch any lectures on builder pattern again and then try again.


Simple factory is not really a pattern but is often confused as one. Let's learn more about this.

In this video we'll introduce Simple factory.

Let's talk about the typical steps you'd follow when implementing a simple factory.

Let' s implement a simple factory now in Java.

In this video we're going to look at some points you should consider while designing & implementing simple factory

Simple Factory - Example

Now let's compare simple factory with factory method design pattern

This video discusses short comings of simple factory.

In this video we will discuss summary of simple factory

Let's test your knowledge on Simple Factory. In case you get any of these wrong, don't worry! You can always go back and watch the lectures again to revise.

One of the most useful & simple creational design pattern - factory method

In this video we'll introduce the builder design pattern.

Let's talk about the typical steps you'd follow when implementing factory method design pattern.

In this video we'll go over the UML diagram of the example which we're going to implement in next video. This video will clarify role of each class we'll be either using or implementing ourselves.

Let' s implement factory method design pattern now in Java. In this video we are going to try out one way to implement this pattern.

In this video we're going to look at some points you should consider while designing & implementing this design pattern.
Factory Method - Example

This video discusses short comings of factory method 

design pattern.

In this video we will discuss summary of factory method design pattern

Let's test your knowledge on Factory Method. In case you get any of these wrong, don't worry! You can always go back and watch the lectures again to revise.

In this section we're going to learn about Prototype design pattern.

In this video we'll introduce the prototype design pattern. Prototype allows us to use existing objects to create more of them!

Let's talk about the typical steps you'd follow when implementing prototype design pattern.

Let's implement prototype design pattern now in Java.

Prototype - Example

Now let's compare prototype pattern with singleton design pattern.

This video discusses short comings of prototype design pattern.

In this video we will discuss summary of prototype design pattern

Let's test your knowledge on Prototype design pattern. In case you get any of these wrong, don't worry! You can always go back and watch the lectures again to revise.

This creational design pattern can be a little difficult to understand, this lesson will explain it with examples.

In this video we'll introduce the abstract factory design pattern.

Let's talk about the typical steps you'd follow when implementing abstract factory design pattern.

Let's implement abstract factory design pattern now in Java.

Abstract Factory - Example

Now let's compare builder pattern with abstract factory design pattern

This video discusses short comings of abstract factory design pattern.

In this video we will discuss summary of abstract factory design pattern

Now, let's test your knowledge on Abstract Factory design pattern. In case you get any of these wrong, don't worry! You can always go back and watch the lectures again to revise.

One of the most used patterns. This has now become an anti-pattern! However it's important that we understand this pattern.
Singleton - Introduction
Singleton - Implementation Steps
Singleton - Implementation - Eager Singleton
Singleton - Implementation - Lazy Singleton
Singleton - Implementation - Initialization Holder
Singleton - Implementation - Enum
Singleton - Implementation & Design Considerations
Singleton - Example
Singleton - Comparison with Factory Method
Singleton - Pitfalls
Singleton - Summary

Let's test your knowledge on Singleton design pattern. In case you get any of these wrong, don't worry! You can always go back and watch the lectures again to revise.

This pattern is one of the most used patterns in enterprise applications.
Object Pool - Introduction
Object Pool - Implementation Steps
Object Pool - Example UML
Object Pool - Implementation
Object Pool - Implementation & Design Considerations
Object Pool - Example
Object Pool - Comparison with Prototype
Object Pool - Pitfalls
Object Pool - Summary

Let's test your knowledge on Object Pool design pattern. In case you get any of these wrong, don't worry! You can always go back and watch the lectures again to revise.

Structural Design Patterns
Structural Design Patterns - Introduction
A pattern that has many uses.
Adapter - Introduction

Good to know

Know what's good
, what to watch for
, and possible dealbreakers
Examples focus on Java and incorporates real world use cases of design patterns and principles
Teaches core 23 GoF design patterns and newer patterns used in modern software development
Builds a strong basis of both design principles and patterns for beginner Java developers
Reinforces and extends knowledge for experienced Java developers with design principles and patterns
Each section offers a full dive into a pattern including its UML diagram, steps to implement it in Java, considerations, real world examples, comparisons, and pitfalls
Follow along code examples and demonstrations help learners grasp the concepts better

Save this course

Save Java Design Patterns & SOLID Design Principles to your list so you can find it easily later:
Save

Reviews summary

Java design patterns comprehensive course

Learners say this course comprehensively examines design patterns in a way that is easy to understand and engaging. According to students, this course covers a comprehensive range of design patterns and is well structured.
Learners say the course is comprehensive and covers a wide range of design patterns.
"He covers design pattern in a very comprehensive manner."
"explains it in a very easy way with all possible explanations"
"Thanks a lot for structuring such a effective course"
Students say they have had a positive learning experience with this course.
"One of the best course of Design Patterns."
"explains it in a very easy way"
"Thanks a lot for structuring such a effective course"

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 Java Design Patterns & SOLID Design Principles with these activities:
Refresh Java
Boost your success by revisiting the fundamentals of Java programming before the course starts.
Browse courses on OOP
Show steps
  • Review core Java syntax and data structures.
  • Go over basic algorithms and problem-solving techniques.
  • Practice writing simple Java programs to reinforce your understanding.
Read 'Head First Design Patterns'
Expand your knowledge of design patterns by reading a classic book on the subject.
Show steps
  • Acquire a copy of 'Head First Design Patterns'.
  • Read through the book, paying attention to the examples and explanations of design patterns.
Follow Java Design Patterns Tutorials
Supplement your understanding by following online tutorials that provide step-by-step guidance on implementing design patterns in Java.
Browse courses on Design Patterns
Show steps
  • Search for online tutorials on Java design patterns.
  • Select tutorials that cover the patterns relevant to the course.
  • Follow the tutorials, implementing the patterns and examples in your own Java code.
Three other activities
Expand to see all activities and additional details
Show all six activities
Solve Coding Challenges
Sharpen your problem-solving skills and reinforce your Java knowledge by solving coding challenges.
Browse courses on Coding Challenges
Show steps
  • Choose an online coding challenge platform (e.g., LeetCode).
  • Select challenges that align with the course topics.
  • Work through the challenges, debugging and refining your code.
Join a Study Group
Enhance your understanding and retention by discussing course concepts and working on projects with peers.
Show steps
  • Find or create a study group with other students in the course.
  • Set regular meeting times to discuss course material, ask questions, and work on assignments together.
Build a Java Project
Solidify your learning by building a practical Java project that incorporates SOLID principles and design patterns.
Browse courses on SOLID
Show steps
  • Identify a problem or idea for a Java project.
  • Design the project architecture using SOLID principles.
  • Implement the project, incorporating appropriate design patterns.
  • Test and refine your project to ensure it meets requirements.

Career center

Learners who complete Java Design Patterns & SOLID Design Principles will develop knowledge and skills that may be useful to these careers:
Technical Lead
As a Technical Lead, you will be responsible for leading a team of software engineers in the development of software products. This course may be useful for you because it will teach you about SOLID design principles and Java design patterns, which are essential for managing software projects effectively. Additionally, this course will help you to develop your problem-solving skills and learn how to work effectively in a team environment.
Software Architect
As a Software Architect, you will be responsible for designing and overseeing the development of complex software systems. This course may be useful for you because it will teach you about SOLID design principles and Java design patterns, which are essential for creating scalable and reliable software systems. Additionally, this course will help you to develop your leadership and communication skills.
Cloud Architect
As a Cloud Architect, you will be responsible for designing and managing cloud-based IT systems. This course may be useful for you because it will teach you about SOLID design principles and Java design patterns, which are essential for creating scalable and reliable cloud-based systems. Additionally, this course will help you to develop your problem-solving skills and learn how to work effectively with stakeholders.
Data Architect
As a Data Architect, you will be responsible for designing and managing data systems. This course may be useful for you because it will teach you about SOLID design principles and Java design patterns, which are essential for creating scalable and reliable data systems. Additionally, this course will help you to develop your problem-solving skills and learn how to work effectively with stakeholders.
Systems Analyst
As a Systems Analyst, you will be responsible for analyzing and designing software systems. This course may be useful for you because it will teach you about SOLID design principles and Java design patterns, which are essential for creating efficient and user-friendly software systems. Additionally, this course will help you to develop your problem-solving skills and learn how to work effectively with stakeholders.
Enterprise Architect
As an Enterprise Architect, you will be responsible for designing and overseeing the implementation of IT systems for an organization. This course may be useful for you because it will teach you about SOLID design principles and Java design patterns, which are essential for creating scalable and reliable IT systems. Additionally, this course will help you to develop your leadership and communication skills.
Solution Architect
As a Solution Architect, you will be responsible for designing and implementing software solutions for clients. This course may be useful for you because it will teach you about SOLID design principles and Java design patterns, which are essential for creating efficient and effective software solutions. Additionally, this course will help you to develop your problem-solving skills and learn how to work effectively with stakeholders.
Web Developer
As a Web Developer, you will be responsible for designing and developing websites. This course may be useful for you because it will teach you about SOLID design principles and Java design patterns, which are essential for creating efficient and user-friendly websites. Additionally, this course will help you to develop your problem-solving skills and learn how to work effectively in a team environment.
Machine Learning Engineer
As a Machine Learning Engineer, you will be responsible for developing and deploying machine learning models. This course may be useful for you because it will teach you about SOLID design principles and Java design patterns, which are essential for understanding how to create and maintain machine learning models. Additionally, this course will help you to develop your problem-solving skills and learn how to work effectively with stakeholders.
Mobile Developer
As a Mobile Developer, you will be responsible for designing and developing mobile applications. This course may be useful for you because it will teach you about SOLID design principles and Java design patterns, which are essential for creating efficient and user-friendly mobile applications. Additionally, this course will help you to develop your problem-solving skills and learn how to work effectively in a team environment.
Technical Writer
As a Technical Writer, you will be responsible for writing technical documentation for software products. This course may be useful for you because it will teach you about SOLID design principles and Java design patterns, which are essential for understanding how software works and how to write clear and concise documentation. Additionally, this course will help you to develop your writing skills and learn how to work effectively in a team environment.
Software Engineer
As a Software Engineer, you will be responsible for the design, development, and maintenance of software applications. This course may be useful for you because it will teach you about SOLID design principles and Java design patterns, which are essential for writing clean and maintainable code. Additionally, this course will help you to develop your problem-solving skills and learn how to work effectively in a team environment.
Game Developer
As a Game Developer, you will be responsible for designing and developing video games. This course may be useful for you because it will teach you about SOLID design principles and Java design patterns, which are essential for creating efficient and engaging video games. Additionally, this course will help you to develop your problem-solving skills and learn how to work effectively in a team environment.
Data Scientist
As a Data Scientist, you will be responsible for using data to solve business problems. This course may be useful for you because it will teach you about SOLID design principles and Java design patterns, which are essential for understanding how to organize and analyze data. Additionally, this course will help you to develop your problem-solving skills and learn how to work effectively with stakeholders.
Software Tester
As a Software Tester, you will be responsible for testing software applications for bugs. This course may be useful for you because it will teach you about SOLID design principles and Java design patterns, which are essential for understanding how software works and how to find bugs. Additionally, this course will help you to develop your problem-solving skills and learn how to work effectively in a team environment.

Reading list

We've selected 14 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 Java Design Patterns & SOLID Design Principles.
Classic on design patterns and provides a comprehensive overview of the topic. It valuable reference for understanding the concepts and principles of design patterns and how they can be applied in software development. A must have companion book for the course if you want to master design patterns.
Provides a comprehensive overview of clean code principles and practices. It valuable resource for learning how to write clean, maintainable, and extensible code. One of the foundational books in software engineering, provides a lot of wisdom that can be applied directly to any code.
Provides a comprehensive overview of the SOLID principles of object-oriented design. It valuable resource for understanding the principles and how they can be applied in software development to write clean and maintainable code. It covers all the principles covered in this course.
Provides a collection of essays on software engineering. It valuable resource for learning about the challenges and complexities of software development.
Provides a comprehensive overview of object-oriented design and analysis. It valuable resource for learning the fundamentals of object-oriented programming and how to design and analyze object-oriented systems.
Provides a comprehensive overview of domain-driven design. It valuable resource for learning how to design software that is closely aligned with the business domain. Since this course goes into the details of design patterns it does not cover principles like DDD. Reading this book will give a learner a good balance.
Provides a more accessible and engaging introduction to design patterns than the Gang of Four book. It good choice for beginners who want to learn about design patterns in a fun and easy-to-understand way.
Provides a comprehensive overview of design patterns in Java. It valuable resource for learning how to apply design patterns in Java code. Focuses exclusively on Java, which is good for learners at the cost of not covering design patterns in general.
Provides a comprehensive overview of design patterns in modern C++. It valuable resource for learning how to apply design patterns in C++ code. Since the course teaches design patterns in the context of Java, learning how they are implemented in C++ can expand the knowledge of the student.
Provides a practical guide to refactoring code. It valuable resource for learning how to improve the design of existing code and make it more maintainable and extensible. Particularly useful as a future reference for when students want to apply the principles learnt.
Provides a comprehensive overview of agile principles, patterns, and practices in C#. It valuable resource for learning how to apply agile methods in C# development. It provides a good contrast to OOAD methodologies taught in this course.
Provides a comprehensive overview of soft skills for software developers. It valuable resource for learning how to be a more effective communicator, collaborator, and leader.
Provides a code of conduct for professional programmers. It valuable resource for learning how to be a more ethical and professional software developer.

Share

Help others find this course page by sharing it with your friends and followers:
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 - 2024 OpenCourser