When you enroll in this course, you'll also be enrolled in this Specialization.
Learn new concepts from industry experts
Gain a foundational understanding of a subject or tool
Develop job-relevant skills with hands-on projects
Earn a shareable career certificate
There are 4 modules in this course
This course extends object-oriented analysis and design by incorporating design patterns to create interactive applications. Through a survey of established design patterns, you will gain a foundation for more complex software applications. Finally, you will identify problematic software designs by referencing a catalog of code smells.
You will be challenged in the Capstone Project to redesign an existing Java-based Android application to implement a combination of design patterns. You will also critique a given Java codebase for code smells.
After completing this course, you will be able to:
• Demonstrate how to use design patterns to address user interface design issues.
• Identify the most suitable design pattern to address a given application design problem.
• Apply design principles (e.g., open-closed, dependency inversion, least knowledge).
• Critique code by identifying and refactoring anti-patterns.
• Apply the model-view-controller architectural pattern.
Design patterns help to solve common design issues in object-oriented software. You will learn what they are and how they can be applied. In this module you will learn the creational and structural design patterns. You will continue to learn and practice expressing designs in UML, and code some of these patterns in Java.
What's included
9 videos8 readings1 assignment2 peer reviews
Show info about module content
9 videos•Total 66 minutes
2.1.1 – What is a Design Pattern?•7 minutes
2.1.2 – Creational, Structural, and Behavioural Patterns•6 minutes
2.1.3 – Singleton Pattern•5 minutes
2.1.4 – Factory Method Pattern•11 minutes
2.1.5 – Facade Pattern•6 minutes
2.1.6 – Adapter Pattern•5 minutes
2.1.7 – Composite Pattern•6 minutes
2.1.8 – Proxy Pattern•7 minutes
2.1.9 – Decorator Pattern•11 minutes
8 readings•Total 80 minutes
Meet Your Presenter – Sam Jeffery•10 minutes
Meet Your Facilitator– Cecilia Xiang•10 minutes
Discussion: Introduce Yourself•10 minutes
Discussion: Design Pattern Examples•10 minutes
Design Patterns Course Notes - Updated July 2021•10 minutes
You will continue learning useful design patterns and add them to your toolbox. In this module, you will learn the behavioural patterns. This will include communicating them in UML and coding them in Java!
What's included
5 videos5 readings1 assignment2 peer reviews
Show info about module content
5 videos•Total 33 minutes
2.2.1 – Template Method Pattern•7 minutes
2.2.2 – Chain of Responsibility Pattern•6 minutes
2.2.3 – State Pattern•6 minutes
2.2.4 – Command Pattern•9 minutes
2.2.5 – Observer Pattern•6 minutes
5 readings•Total 50 minutes
Discussion: Undo/Redo As a Pattern•10 minutes
Mediator Pattern•10 minutes
Peer Review Request Forum•10 minutes
Capstone Assignment 2.1 - Implement the Command Pattern (Solution)•10 minutes
Capstone Assignment 2.1– Implement the Command Pattern•60 minutes
Ungraded Assignment – Observer Pattern•60 minutes
Working with Design Patterns & Anti-patterns
Module 3•4 hours to complete
Module details
You will learn a design pattern that is very useful for user interfaces: model-view-controller, or MVC. Then you will learn some principles underlying the design patterns, to create software that is flexible, reusable, and maintainable. Finally, you will learn some of the symptoms of bad design, which we call code smells or antipatterns.
In the previous modules, you were introduced to a variety of design patterns, and applied two of these to the example Android code base. Now, in the final module of the course, you will identify and fix specific code smells in this code base. After completing these tasks, you will be ready to complete the final exam.
The University of Alberta is considered among the world’s leading public research- and teaching-intensive universities, known for excellence across the humanities, sciences, creative arts, business, engineering and health sciences.
As one of Canada’s top universities, we are investing in purpose-built online post-secondary education—rooted in innovative digital pedagogies, world-class faculty, exceptional design, and a championed student experience.
"To be able to take courses at my own pace and rhythm has been an amazing experience. I can learn whenever it fits my schedule and mood."
Jennifer J.
Learner since 2020
"I directly applied the concepts and skills I learned from my courses to an exciting new project at work."
Larry W.
Learner since 2021
"When I need courses on topics that my university doesn't offer, Coursera is one of the best places to go."
Chaitanya A.
"Learning isn't just about being better at your job: it's so much more than that. Coursera allows me to learn without limits."
Learner reviews
4.7
1,375 reviews
5 stars
75.43%
4 stars
19.40%
3 stars
3.12%
2 stars
1.09%
1 star
0.94%
Showing 3 of 1375
B
BS
5·
Reviewed on Jun 3, 2021
The concepts had a lucid articulation. The course covered most of the design patterns including design principles behind them. I found it very useful.
M
MB
5·
Reviewed on Jun 29, 2023
An awesome and thorough introduction to design patterns. The assignments helped very much with implementing them in a real world application. Thankyou everyone involved in this course.
S
SH
5·
Reviewed on Aug 24, 2021
Wonderful course. It can enhance tour knowledge and give opportunity to explore more about design patterns. There are wonderful examples, assignments and quiz. I would highly recommend this course.
What will I actually learn in this design patterns course?
You'll learn how to choose and apply design patterns to improve object-oriented software, especially interactive applications. It starts with core pattern ideas in Java and UML, then builds into behavioral patterns, MVC, design principles, and code smells. By the end, you'll use those ideas to redesign parts of an existing Java-based Android app and critique a codebase for anti-patterns.
Do I need to know Java before taking this course?
You don't need prior design patterns knowledge, but some Java and object-oriented programming familiarity will help. The course moves quickly into implementing patterns in Java, reading UML diagrams, and working with an existing codebase rather than teaching programming basics from scratch. Android experience is useful for later assignments, but the course provides a starter option recommended for learners without Android programming experience.
Is this course beginner-friendly for design patterns?
It can work if you're new to design patterns, but not if you're brand new to programming. The course is labeled intermediate and expects you to follow Java code, UML, and refactoring work from fairly early on. It fits best if you already understand object-oriented basics and want to level up your software design skills.
How long does it take to complete this course?
Plan on about 15 hours in total. At around 10 hours a week, that's roughly 1 to 2 weeks of work, depending on how much time you spend on the coding assignments and capstone tasks. The course includes lessons, readings, quizzes, and practice assignments, so the workload stays varied.
Are there hands-on exercises or projects in this course?
Yes, there is real hands-on work, but it's mostly guided rather than fully open-ended. You'll implement patterns in Java from UML diagrams and complete capstone assignments that apply ideas like the Command pattern or MVC to an existing app codebase. That practice helps you connect each pattern to an actual design problem instead of only learning the vocabulary.
What skills and topics are covered in this course?
The course covers major design pattern families, UML-based design communication, and the software design principles behind flexible code. You'll study creational, structural, and behavioral patterns, then use ideas like open-closed or dependency inversion when evaluating design choices. It also builds your ability to recognize code smells and think about refactoring more systematically.
What can I actually do after finishing this course?
After finishing, you should be able to match a design problem to an appropriate pattern and explain or implement that choice in Java. You should also be able to read and sketch UML for common patterns, reorganize code around MVC, and identify code smells that need refactoring. In practice, that means you can review an existing codebase and make targeted design improvements instead of only naming patterns from memory.
Is this course more focused on theory or hands-on learning?
It's more concept-first, with guided coding practice throughout. The course spends a lot of time on when patterns and design principles make sense, then reinforces that through Java assignments, UML exercises, and capstone work.
Why would I choose this course over other design patterns courses?
Choose this course if you want design patterns taught as software design decisions, not just as a catalog to memorize. It connects pattern families with UML, MVC, design principles, and code smells, then asks you to apply them to an existing Java-based Android app and critique real code. If you're looking for an intermediate course that mixes explanation with guided redesign work, this is a good fit.