We may earn an affiliate commission when you visit our partners.
Course image
Holczer Balazs

This course is about software architecture and design patterns. We will talk about two man topics: SOLID principles and design patterns. We are going to implement the problems in Java, but the theoretical background is language-independent. I highly recommend typing out the implementations several times on your own in order to get a good grasp of it.

Section 1 - SOLID Principles

Read more

This course is about software architecture and design patterns. We will talk about two man topics: SOLID principles and design patterns. We are going to implement the problems in Java, but the theoretical background is language-independent. I highly recommend typing out the implementations several times on your own in order to get a good grasp of it.

Section 1 - SOLID Principles

  • what are SOLID principles?

  • single responsibility principle

  • open closed principle

  • Liskov's substitution principle

  • interface segregation principle

  • dependency inversion principle

  • what is dependency injection?

Section 3 - Creational Design Patterns

  • what are creational design patterns?

  • singleton pattern

  • factory pattern

  • abstract factory pattern

  • builder pattern

  • prototype pattern

Section 2 - Behavioral Design Patterns

  • what are behavioral design patterns?

  • strategy pattern

  • observer pattern

  • command pattern

  • iterator pattern

  • template pattern and null object pattern

  • visitor pattern

Section 3 - Structural Design Patterns

  • what are structural design patterns?

  • decorator pattern

  • flyweight pattern

  • facade pattern

  • adapter pattern

Section 4 - Model-View-Controller (MVC) Pattern

  • the model-view-controller (MVC) model

  • an application with Java Swing

In the first part of the course we are going to learn about the SOLID principles. We are going to talk about the theory as well as the implementations.

The second part of the course is about design patterns. We should have a deep understanding of these patterns in order to be able to write reusable software components. These techniques are becoming more and more important as applications are getting more and more complex, so - in my opinion - these topics are good to know.

Thank for joining the course, let's get started.

Enroll now

Here's a deal for you

We found an offer that may be relevant to this course.
Save money when you learn. All coupon codes, vouchers, and discounts are applied automatically unless otherwise noted.

What's inside

Learning objectives

  • Understand solid principles
  • Understand the core of design patterns
  • Undertand object oriented design
  • Understand the single responsibility principle
  • Understand the open / closed principle
  • Understand the liskov substitution principle
  • Understand the interface segregation principle
  • Understand the dependency inversion principle
  • Understand creational design patterns (singleton pattern, factory pattern, builder pattern and prototype pattern)
  • Understand behavioral design patterns (strategy pattern, command pattern, visitor pattern and template pattern)
  • Understand structural design patterns (adapter pattern, facade pattern and decorator pattern)
  • Show more
  • Show less

Syllabus

Introduction
SOLID Principles
What are SOLID principles?
S - Single Responsibility Principle
Read more
Single responsibility principle introduction
Single responsibility principle example
Exercise
Solution
Single Responsible Principle Quiz
O - Open/Closed Principle
The open/closed principle introduction
The open/closed principle example
Open/Closed Principle Quiz
L - Liskov Substitution Principle
Liskov substitution principle
Liskov substitution principle example
I - Interface Segregation Principle
Interface segregation principle
Interface segregation principle example
Example
Interface Segregation Quiz
D - Dependency Inversion
Dependency inversion principle introduction
Inversion of control - dependency injection
Dependency inversion principle example
Dependency Inversion Principle Quiz
Design Patterns
What are design patterns?
CREATIONAL DESIGN PATTERNS
Creational design patterns
Singleton Pattern
What is the singleton pattern?
Singleton pattern example
Singleton pattern with enums
Singleton Pattern Quiz
Factory Pattern
Factory pattern introduction
Factory pattern example
Abstract factory pattern example
Factory Pattern Quiz
Builder Pattern
Builder pattern introduction
Builder pattern example - avoiding telescopic constructors
Why to use builder pattern?
Builder Pattern Quiz
Prototype Pattern
What is the prototype pattern?
Prototype pattern example
BEHAVIORAL DESIGN PATTERNS
Behavioral design patterns
Strategy Pattern
What is the strategy pattern?
Strategy pattern example
Why to use strategy pattern?
Strategy Pattern Quiz
Observer Pattern
Observer pattern introduction
Observer pattern example
Observer pattern with user interface components (Swing)
Exercise - the basics of algorithmic trading
Observer Pattern Quiz
Command Pattern
What is the command pattern?
Command pattern example
Queuing model with the command pattern
Command Pattern Quiz
Iterator Pattern
Iterator pattern introduction
Iterator pattern example
External and internal iteration
Template Pattern
Template pattern introduction
Template pattern example
Template Pattern Quiz
NULL Object Pattern
Null object pattern introduction
Null object pattern example
Avoiding null values with Optional
Visitor Pattern
Visitor pattern introduction
Visitor pattern implementation
STRUCTURAL DESIGN PATTERNS
Structural design patterns
Decorator Pattern
Decorator pattern introduction

Good to know

Know what's good
, what to watch for
, and possible dealbreakers
Develops an intuitive understanding of SOLID principles, which are core concepts in software design and object-oriented programming
Examines design patterns, which are a set of well-defined solutions to common software design problems
Taught by Holczer Balazs, who is recognized as an expert in software design patterns
Covers a wide range of software architectural and design pattern topics, from single responsibility to inversion of control, from creational to structural patterns
Provides a mix of theoretical explanations and practical implementations in Java

Save this course

Save Software Architecture (SOLID) & Design Patterns in Java to your list so you can find it easily later:
Save

Reviews summary

Well-received software architecture course

According to students, this course is well-received and engaging with simple and easy-to-understand lectures, readings, and assignments. Learners comment that this beginner-friendly course offers an in-depth understanding of software architecture and design patterns in Java. With clear and detailed explanations, this course is ideal for those looking to advance their knowledge of software development principles.
Lectures and materials keep learners engaged.
"I like the way the course is set up."
"I've found the topics easy to remember so far"
"Sal's background as a teacher really shows in the way she structures her courses and in the way she produces the content."
Concepts are explained in an easy-to-understand manner.
"good easy to understand"
"easy to understand and lots of examples"
"very interesting, easy to follow, easy to understand."
Course provides comprehensive knowledge of software architecture.
"The course is good, profound knowledge."
"Super informative AND actually taught from the heart instead of just reading from a book like I've experienced on other courses on Udemy. I appreciate the instructors intuitiveness and incredible amount of knowledge."
"I have Ben reading Tarot for a long time. Learning this new aspect of it has expanded my way of seeing the cards and further interpreting them for my readings."
Course is well-suited for beginners.
"Loved the course. It was easy to learn as Iam beginner."
"Easy to understand for beginners. Well-structured."
"it is absolutely great! I am a total beginner and the explanations are great to understand the tarot clearly!"

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 Software Architecture (SOLID) & Design Patterns in Java with these activities:
Organize and review course materials
Enhance your understanding by organizing and reviewing notes, assignments, quizzes, and exams from the course.
Browse courses on Note-Taking
Show steps
  • Gather all relevant course materials
  • Review and summarize key concepts
  • Identify areas for further clarification
Review OOP concepts
Refresh your understanding of fundamental OOP concepts such as classes, objects, and inheritance, which will help you solidify your foundation for this course.
Browse courses on OOP
Show steps
  • Review class and object structure
  • Practice creating and manipulating objects
  • Explore inheritance and polymorphism
Explore online tutorials on design patterns
Expand your understanding of design patterns and SOLID principles through curated online tutorials.
Browse courses on Design Patterns
Show steps
  • Identify reputable online resources
  • Select tutorials relevant to the course topics
  • Follow the tutorials and take notes
Five other activities
Expand to see all activities and additional details
Show all eight activities
Attend a workshop on object-oriented design
Participate in a workshop led by experts to gain practical insights and hands-on experience with object-oriented design.
Browse courses on Object-oriented Design
Show steps
  • Research and identify relevant workshops
  • Register for the workshop
  • Attend the workshop and actively participate
Implement design patterns in Java
Reinforce your understanding of design patterns by implementing them in a practical Java setting.
Browse courses on Creational Patterns
Show steps
  • Choose a design pattern to implement
  • Design the class structure and relationships
  • Implement the pattern's functionality
  • Test your implementation
Develop a visual representation of design patterns
Enhance your comprehension by creating visual representations, such as diagrams or flowcharts, of the design patterns covered in the course.
Browse courses on Design Patterns
Show steps
  • Choose a design pattern to represent
  • Sketch out a draft diagram
  • Refine the diagram using appropriate tools
Contribute to open-source projects using design patterns
Apply your knowledge by contributing to open-source projects that utilize design patterns, providing real-world experience.
Browse courses on Open Source
Show steps
  • Identify open-source projects that align with your interests
  • Review the codebase and identify areas where design patterns can be applied
  • Propose and implement your design pattern improvements
Develop a design pattern library
Solidify your understanding by creating a reusable library of design patterns that can be applied to future projects.
Browse courses on Design Patterns
Show steps
  • Research and select design patterns to include
  • Design and implement the library
  • Test and document the library

Career center

Learners who complete Software Architecture (SOLID) & Design Patterns in Java will develop knowledge and skills that may be useful to these careers:
Lead Software Architect
As a Sr. Software Architect, you will be applying your in depth knowledge of the SOLID principles to establish software design and organization. You will lead and guide other software engineers and architects on your team to apply creational, behavioral, and structural design patterns to emerging and existing modular systems. This course will help you build a foundation and understanding of design patterns that will position you for success in this leadership role.
Software Architect
As a Software Architect, you will be applying your in depth knowledge of the SOLID principles to establish software design and organization. You will lead and guide other software engineers on your team to apply creational, behavioral, and structural design patterns to emerging and existing modular systems. This course will help you build a foundation and understanding of design patterns that will position you for success in this leadership role.
Technical Lead
As a Technical Lead, you will be applying your understanding of the SOLID principles to establish software design and organization. You will lead and guide other software engineers on your team to apply creational, behavioral, and structural design patterns to emerging and existing modular systems. This course will help you build a foundation and understanding of design patterns that will position you for success in this leadership role.
Sr. Software Engineer
As a Sr. Software Engineer, you will be applying your understanding of the SOLID principles to establish software design and organization. You will lead and guide other software engineers on your team to apply creational, behavioral, and structural design patterns to emerging and existing modular systems. This course will help you build a foundation and understanding of design patterns that will position you for success in this leadership role.
Software Engineer
As a Software Engineer, you will be applying your knowledge of the SOLID principles to establish software design and organization. You will learn to apply creational, behavioral, and structural design patterns to emerging and existing modular systems. This course will help you build a foundation and understanding of design patterns that will position you for success in this foundational role.
Computer Programmer
As a Computer Programmer, you will be applying your knowledge of the SOLID principles to establish software design and organization. You may lead and guide other software engineers on your team to apply creational, behavioral, and structural design patterns to emerging and existing modular systems. This course will help you build a foundation and understanding of design patterns that will position you for success in this foundational role.
Computer Scientist
As a Computer Scientist, you will be applying your knowledge of the SOLID principles to establish software design and organization. You may lead and guide other software engineers on your team to apply creational, behavioral, and structural design patterns to emerging and existing modular systems. This course will help you build a foundation and understanding of design patterns that will position you for success in this foundational role.
Software Developer
As a Software Developer, you will be applying your knowledge of the SOLID principles to establish software design and organization. You may lead and guide other software engineers on your team to apply creational, behavioral, and structural design patterns to emerging and existing modular systems. This course will help you build a foundation and understanding of design patterns that will position you for success in this foundational role.
Web Developer
As a Web Developer, you will be applying your knowledge of the SOLID principles to establish web design and organization. You may lead and guide other developers on your team to apply creational, behavioral, and structural design patterns to emerging and existing modular systems. This course will help you build a foundation and understanding of design patterns that will position you for success in this foundational role.
Database Administrator
As a Database Administrator, you may not always be applying your knowledge of the SOLID principles to establish software design and organization directly, but you will need to have a working knowledge to assist and converse with the development team. This course will help you build a foundation and understanding of design patterns that will position you for success in this role.
Systems Analyst
As a Systems Analyst, you may not always be applying your knowledge of the SOLID principles to establish software design and organization directly, but you will need to have a working knowledge to assist and converse with the development team. This course may help you build a foundation and understanding of design patterns that will position you for success in this role.
Program Manager
As a Program Manager, you may not always be applying your knowledge of the SOLID principles to establish software design and organization directly, but you will need to have a working knowledge to assist and converse with the development team. This course may help you build a foundation and understanding of design patterns that will position you for success in this role.
IT Manager
As an IT Manager, you may not always be applying your knowledge of the SOLID principles to establish software design and organization directly, but you will need to have a working knowledge to assist and converse with the development team. This course may help you build a foundation and understanding of design patterns that will position you for success in this role.
Business Analyst
As a Business Analyst, you may not always be applying your knowledge of the SOLID principles to establish software design and organization directly, but you will need to have a working knowledge to assist and converse with the development team. This course may help you build a foundation and understanding of design patterns that will position you for success in this role.
UX Designer
As a UX Designer, you may not always be applying your knowledge of the SOLID principles to establish software design and organization directly, but you will need to have a working knowledge to assist and converse with the development team. This course may help you build a foundation and understanding of design patterns that will position you for success in this role.

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 Software Architecture (SOLID) & Design Patterns in Java.
Head First Design Patterns classic book on design patterns written in a friendly and engaging style. It good read for anyone who wants to learn about design patterns and how to use them in their own projects.
A classic reference on design patterns, providing in-depth explanations and examples.
Building Microservices great book for learning about how to build microservices. It valuable resource for anyone who wants to build software that is more scalable and reliable.
The Art of Software Testing great book for learning about software testing. It valuable resource for anyone who wants to write software that is more reliable and bug-free.
Designing Data-Intensive Applications great book for learning about how to design data-intensive applications. It valuable resource for anyone who wants to build software that can handle large amounts of data.
Domain-Driven Design: Tackling Complexity in the Heart of Software great book for learning about domain-driven design. It valuable resource for anyone who wants to design software that is more maintainable and extensible.
The Clean Architecture: A Craftsman's Guide to Software Structure and Design great book for learning about software architecture. It valuable resource for anyone who wants to design software that is more maintainable and extensible.
Test-Driven Development: By Example great book for learning about test-driven development. It valuable resource for anyone who wants to write software that is more testable and reliable.
Working Effectively with Legacy Code great book for learning about how to work with legacy code. It valuable resource for anyone who wants to maintain and extend existing software systems.
Provides guidelines and best practices for writing maintainable and readable code, which aligns with the SOLID principles.
Covers agile software development principles and practices, including the SOLID principles, in the context of C#.

Share

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

Similar courses

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