
The course overview introduces two topics: solid principles and design patterns, with Java-focused videos, PDFs, and practical exercises. Quizzes and a Q&A keep concepts clear.
Trace the origin of the solid principles—open-closed principle, Liskov substitution principle, dependency inversion principle, interface segregation principle, and single responsibility principle—and how Uncle Bob and others shaped maintainable object-oriented design.
Apply the single responsibility principle, derived from cohesion, so each class has a single reason to change, avoiding mixing business logic with presentation logic.
Refactor the movie recommender to follow the single responsibility principle by separating recommendation logic from csv formatting, exclude seen movies, and implement a csv exporter to enforce title, director, genre.
Learn how the open-closed principle enables extending software by adding new shapes without modifying existing code, using a shape interface and painter delegation.
Explore the Liskov substitution principle (LSP), showing how inheritance and polymorphism require subtypes to preserve behaviors, illustrated with Java arrays, equals contracts, and date and timestamp cases.
Explore the interface segregation principle by splitting a communicator into separate interfaces: a communicator interface and an encryption interface, ensuring clients depend only on needed methods and promoting high cohesion.
Explore the dependency inversion principle by contrasting it with dependency injection, and learn to design high-level modules that depend on abstractions rather than low-level details across layered architectures.
Share feedback to help perfect this comprehensive course on solid principles and design patterns for java programmers. Engage with reviews, questions, and announcements via the Q&A tab and course updates.
Trace the origins of design patterns from architecture to software, recounting Alexander's pattern language and the GoF catalog of 23 patterns across creation, structure, and behavior.
Explore the chain of responsibility by modeling a coin-recognition system with individual recognizers that pass unhandled coins along a chain until one accepts, illustrating a behavioral design pattern.
Centralize the creation of related data repositories using the abstract factory pattern, enabling relational or NoSQL implementations for students and courses through interfaces without exposing concrete classes.
Master the builder pattern in Java to avoid telescoping constructors, using a person builder with mandatory name, optional birthplace, and adult or child variants via method chaining and build.
Apply the factory method pattern to encapsulate object creation for varying types, illustrated by car factories and a maze game with ordinary and magical rooms, without modifying common code.
Learn how the prototype pattern enables creating new, customized objects by copying a prototypical instance, illustrated with PDF table cells and a configuration that modifies only the fields that change.
Review the clone method on Java objects and its relation to the prototype pattern, cover CloneNotSupportedException, Cloneable, public visibility, property-by-property copying, deep copy, and practical drawbacks.
Explore the singleton pattern, its concurrency and serialization pitfalls, and safer implementations using a private constructor, synchronization, double-checked locking, a resolve method, and enums in Java.
Apply the adapter pattern by wrapping an existing reservation system with a new StandardReservationACME interface, translating calls without modifying the original code.
Learn how the bridge pattern separates abstraction from implementation to connect hierarchies. Apply this approach to build an adaptable online sales interface across shops using refined abstractions and concrete implementors.
Treats individual shapes and selections uniformly by composing objects into tree structures. Implements a shape interface for both leaves and composites, enabling uniform draw operations and flexible grouping.
Explore how the decorator pattern extends coffee functionality through composition by wrapping base coffees with extras, altering description and price without changing existing code.
The facade pattern provides a unified, higher-level interface to coordinate multiple subsystems, such as the secretary, curriculum, bookshop, and library, making matriculation process easier for Java programmers.
Explore the flyweight pattern, which shares intrinsic state to reduce memory, and distinguishes intrinsic, extrinsic, and context data, with Java string interning as a practical example.
Explore how the proxy pattern uses composition to add access control and delay creation via a virtual proxy, with Jpa as an example, delegating to the real object when authorized.
Explore how composition extends functionality by creating a new type that references the original, enabling proxy, decorator, adapter, and facade patterns with the same interface, embodying composition over inheritance.
Explore the chain of responsibility pattern, linking a chain of handlers to pass a request along until one handles it, reducing coupling and resolving diverse, independent cases.
Master the command pattern that encapsulates processing as an object to support multiple orders, including dangerous and international shipments.
Harness the interpreter pattern to define a grammar and parse a domain-specific language that evaluates grade calculations using add, product, variables, and literals against a student context.
Explore the iterator pattern and the visitor pattern, showing how to access elements sequentially and perform operations without exposing internal structure, illustrated by a ledger example.
Learn how the mediator pattern centralizes interactions among smart home devices such as lamp, alarm clock, TV, and radio to enforce rules with reduced coupling.
Explore the memento pattern to implement reliable undo functionality in a shopping basket, showing how to create deep copies of state to restore past states without breaking encapsulation.
Explore the observer pattern through a university enrollment example, turning enrollment events into published notifications to registered observers while decoupling the enrollment service from subsystems.
Explore how the state pattern lets an object change behavior based on its internal state, using a microwave oven example to illustrate state machines and transitions.
The strategy pattern encapsulates the tuition pricing algorithm, allowing runtime changes to how subject prices are calculated, supporting reference price, low-income discounts, and other variants.
The template method provides a super class skeleton and abstract steps to share the external structure of similar checks, as in masters and bachelor degree applications.
Explore unit testing of domain classes and how the builder pattern simplifies object creation, enabling readable tests for student, course, enrollment relations and prerequisites.
Explore the strangler pattern and facade approach to migrating legacy applications to the cloud through gradual, controlled steps, reducing risk while keeping a stable api for clients.
Reflect on applying solid principles and design patterns to real-world Java code, internalize the ideas to improve design decisions, and revisit the course to keep insights fresh.
Welcome to our Design Patterns & SOLID Principles course, developed with Java programmers in mind! We launched the course back in 2020 but are continually checking and updating the coursework as we go along. Our course will help you understand and discover the Design Patterns created by the Gang of Four (Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides) who wrote the book "Design Patterns: Elements of Reusable Object-Oriented Software".
Design Patterns are general solutions to problems that appear over and over again in complex applications. Whether you are familiar with the topic and need a recap, or are starting your programming studies, this course is for you. With a brilliant look at the theory of this topic, the course also brings a practical element into it whereby you can test your own programming skills through our Eclipse projects. Understanding Design Patterns gives you a broad catalogue of general solutions to tackle even the most complicated programming tasks, which have been discovered, analysed and described in detail by the Gang of Four in their book.
What are Design Patterns?
Design Patterns are identified as 23 general, repeatable solutions to problems that we are likely to come across as a programmer and were developed by the infamous Gang of Four. They are divided into 3 main categories: creational, structural and behavioural. We take a look at each of these patterns and explain them in an easy to follow manner, explaining how they can be used to elegantly solve problems while complying with the requirements of encapsulation, extensibility and other factors that a professional design requires.
What are SOLID Principles?
SOLID Principles are perhaps the best-known set of principles to assess the quality of an object-oriented system. They help us detect bad smells in our code and create clean architectures. Examples of these principles include the Open / Closed Principle and the Liskov Substitution Principle. This course will highlight to you what a beautiful and essential part of programming they are. Hoping they come in handy and change your perception even of your work.
Our course program:
Each of our lessons takes you through the theory of a pattern or principle with concise and clear explanations, getting straight to the point. We have created practical exercises via 18 Eclipse projects for you to test your understanding, which comes with an automated correction system. Internalizing the theory through these exercises is fundamental to learning and improving our code writing skills. As well as this, at the end of each section, there is a short quiz for quick-fire checking of your knowledge!
As our students come from all over the world, we have developed subtitles in both English and Spanish to assist with the learning experience. We intend to give our students the best support they can get while taking our course; therefore, we are always on hand to answer any questions via the Q&A tab and message board.
Summary of what our course includes:
- Easy to follow presentations covering Design Patterns & SOLID Principles
- Downloadable PDF of the presentation
- Practical exercises via Eclipse projects with an automated correction system
- End of section quiz
- Subtitles in English (UK & US) and Spanish
If you've been looking for an opportunity to improve your code-writing skills, this is the right course for you!