We may earn an affiliate commission when you visit our partners.
Course image
Kenny Wong

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.

Read more

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.

Enroll now

What's inside

Syllabus

Introduction to Design Patterns: Creational & Structural Patterns
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.
Read more
Behavioural Design Patterns
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!
Working with Design Patterns & Anti-patterns
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.
Capstone Challenge
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.

Good to know

Know what's good
, what to watch for
, and possible dealbreakers
Develops skills in design patterns that are core for building interactive user interfaces with Android
Covers user interface design issues using design patterns
Builds an understanding of creational, structural, and behavioral patterns used in software design
Focuses on code quality by identifying and refactoring anti-patterns
Develops fundamental knowledge in model-view-controller architecture patterns
Suitable for learners with experience in object-oriented analysis and design

Save this course

Save Design Patterns to your list so you can find it easily later:
Save

Reviews summary

Design patterns: oo design for effective code

Learners say this engaging course delivers lucid explanations about object-oriented design patterns and principles. Students largely appreciate the rich theoretical content, well-structured assignments, and diverse quizzes. While some wish for more practical examples and clarity in UML diagrams, the course is highly recommended for learners of all experience levels looking to improve their software development skills.
assignments help solidify understanding
"This is an excellent course for the individuals who are seeking to advance career in programming because design patterns are the flavor of programming and the code smells if it does not have patterns implemented."
"Assignments are good and the mechanism of peer review is very good."
"An awesome and thorough introduction to design patterns. The assignments helped very much with implementing them in a real world application."
course material is organized and well-paced
"Very nice application. It helps me understand more about the design pattern, which is essential for software developers. I highly recommended this course to software graduate, junior, middle software developers."
"Very well structured course. Assignments are good and the mechanism of peer review is very good."
"It's a very good course to take if you're specializing in software architecture or just formalizing your specialization."
appropriate for beginners and experienced learners
"I am just a junior programmer now, but after completing this course I can recommend it to other juniors."
"The course is good, but I think it can benefit of doing pure java exercises, rather than to have to depend on an application on android"
"I so glat to attend this cource and, it was more interesting than I expected"
UML diagrams need improvement for clarity
"Overall a good course, but I found the UML diagrams very confusing."
"I was very pleased with the OO Design course of this same team, however, I am a bit disappointed with this course."
"The material is not well enough."
needs more real-world examples and exercises
"The course is good, but the review is a little slow. Maybe he number of people studying this course is small?"
"Content is good. Discussion forums are not useful. Course assignments are based on Android which adds an extra level of difficulty which is not necessary given the content, and do not demonstrate the value of any of the design patterns taught."
"I really enjoyed how the concepts are explored. My humble suggestion is to increase the level of examples in the code smells section."

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 Design Patterns with these activities:
Read 'Design Patterns: Elements of Reusable Object-Oriented Software'
Familiarize yourself with a classic reference book on design patterns and their application in object-oriented software development.
Show steps
  • Acquire a copy of the book through a library, bookstore, or online retailer.
  • Establish a regular reading schedule and dedicate time each day or week to reading and理解 the discussed concepts.
  • Take notes, highlight important sections, and engage in active reading to improve comprehension and recall.
Curate a Collection of Design Pattern Resources
Develop a valuable reference for yourself and others by compiling resources on design patterns.
Browse courses on Design Patterns
Show steps
  • Conduct an online search and explore various resources, such as articles, tutorials, videos, and code repositories.
  • Evaluate the quality and relevance of each resource.
  • Organize the resources into a structured collection, such as a document, spreadsheet, or online platform.
Follow tutorials on Android Design Patterns
Supplement the course material by following tutorials that demonstrate practical applications of design patterns in Android app development.
Browse courses on Design Patterns
Show steps
  • Identify reputable online resources and video tutorials that provide step-by-step instructions on Android design patterns.
  • Follow the tutorials, implement the patterns in small-scale sample projects, and experiment with different scenarios.
Five other activities
Expand to see all activities and additional details
Show all eight activities
Attend a Workshop on Design Patterns in Java
Enhance your understanding through practical hands-on experience and personalized guidance.
Browse courses on Design Patterns
Show steps
  • Locate a reputable software workshop or training organization that offers a workshop on design patterns in Java.
  • Register for the workshop and attend all scheduled sessions.
  • Actively participate in the exercises, ask questions, and engage with the instructors and fellow participants.
Form a Study Group for Design Pattern Analysis
Collaborate with peers to analyze code for design patterns and improve understanding.
Browse courses on Design Patterns
Show steps
  • Identify a group of peers who are also enrolled in the course or have similar interests in design patterns.
  • Establish regular meeting times and a communication channel for the group.
  • Select code examples or real-world projects to analyze and discuss as a group.
Identify Design Pattern Examples
Test your understanding of design patterns and code smells through practice exercises.
Browse courses on Design Patterns
Show steps
  • Obtain a collection of code snippets or real-world code examples that illustrate different design patterns.
  • Analyze the code and identify the specific design patterns and code smells present.
  • Justify your analysis and explain how the patterns or smells impact the code's quality and maintainability.
Contribute to an Open-Source Project Involving Design Patterns
Gain practical experience and contribute to the community by working on open-source projects that utilize design patterns.
Browse courses on Design Patterns
Show steps
  • Identify open-source projects on platforms like GitHub that are related to design patterns and align with your interests.
  • Review the project's documentation and codebase to understand its architecture and design.
  • Identify areas where you can contribute by adding new features, fixing bugs, or refactoring code to follow design patterns.
Design and Implement a Mobile App Using Design Patterns
Demonstrate your ability to apply design patterns effectively by building a mobile app that incorporates multiple patterns.
Browse courses on Android Development
Show steps
  • Plan and design the app, considering the user interface, functionality, and appropriate design patterns.
  • Develop the app in Java for the Android platform, implementing the chosen design patterns.
  • Test and debug the app to ensure it functions correctly and adheres to the design patterns.
  • Document the design decisions and justify the use of specific design patterns in the app.

Career center

Learners who complete Design Patterns will develop knowledge and skills that may be useful to these careers:
Software Architect
Software Architects are responsible for the overall design and architecture of software systems. They use their knowledge of design patterns and software engineering principles to create systems that are scalable, reliable, and maintainable. This course would be beneficial for Software Architects as it would provide them with a deep understanding of design patterns and how to apply them in practice. The course would also help them to develop the skills they need to critique code and identify anti-patterns.
Systems Analyst
Systems Analysts are responsible for analyzing and designing software systems. They work with stakeholders to understand their needs and then design systems that meet those needs. This course would be beneficial for Systems Analysts as it would provide them with a strong foundation in design patterns and how to apply them to real-world problems. The course would also help them to develop the skills they need to communicate with stakeholders and document their designs.
Software Engineer
Software Engineers are responsible for designing, developing, and testing software systems. They use their knowledge of design patterns and software engineering principles to create systems that are efficient, reliable, and maintainable. This course would be beneficial for Software Engineers as it would provide them with a deep understanding of design patterns and how to apply them in practice. The course would also help them to develop the skills they need to work in a team environment and to communicate their ideas effectively.
Software Developer
Software Developers are responsible for writing the code that implements software systems. They work with Software Engineers to design and develop systems that meet the needs of stakeholders. This course would be beneficial for Software Developers as it would provide them with a strong foundation in design patterns and how to apply them to real-world problems. The course would also help them to develop the skills they need to work in a team environment and to communicate their ideas effectively.
Mobile Developer
Mobile Developers are responsible for designing and developing mobile applications. They use their knowledge of design patterns and mobile development technologies to create apps that are user-friendly, efficient, and accessible. This course would be beneficial for Mobile Developers as it would provide them with a strong foundation in design patterns and how to apply them to mobile development. The course would also help them to develop the skills they need to work in a team environment and to communicate their ideas effectively.
Web Developer
Web Developers are responsible for designing and developing websites and web applications. They use their knowledge of design patterns and web development technologies to create websites that are user-friendly, efficient, and accessible. This course would be beneficial for Web Developers as it would provide them with a strong foundation in design patterns and how to apply them to web development. The course would also help them to develop the skills they need to work in a team environment and to communicate their ideas effectively.
Game Developer
Game Developers are responsible for designing and developing video games. They use their knowledge of design patterns and game development technologies to create games that are fun, engaging, and visually appealing. This course would be beneficial for Game Developers as it would provide them with a strong foundation in design patterns and how to apply them to game development. The course would also help them to develop the skills they need to work in a team environment and to communicate their ideas effectively.
User Experience Designer
User Experience Designers are responsible for designing the user interface and user experience of software systems. They work with stakeholders to understand their needs and then design interfaces that are user-friendly, efficient, and accessible. This course would be beneficial for User Experience Designers as it would provide them with a strong foundation in design patterns and how to apply them to user interface design. The course would also help them to develop the skills they need to communicate their ideas effectively.
Information Architect
Information Architects are responsible for designing the structure and organization of websites and web applications. They work with stakeholders to understand their needs and then design architectures that are efficient, scalable, and maintainable. This course would be beneficial for Information Architects as it would provide them with a strong foundation in design patterns and how to apply them to information architecture. The course would also help them to develop the skills they need to communicate their ideas effectively.
Business Analyst
Business Analysts are responsible for analyzing and understanding the business needs of organizations. They work with stakeholders to identify problems and opportunities and then develop solutions that meet those needs. This course would be beneficial for Business Analysts as it would provide them with a strong foundation in design patterns and how to apply them to business analysis. The course would also help them to develop the skills they need to communicate their ideas effectively.
Project Manager
Project Managers are responsible for planning, executing, and closing projects. They work with stakeholders to define the scope of the project, develop the project plan, and track the project's progress. This course would be beneficial for Project Managers as it would provide them with a strong foundation in design patterns and how to apply them to project management. The course would also help them to develop the skills they need to communicate their ideas effectively.
Technical Writer
Technical Writers are responsible for writing documentation for software systems and other technical products. They work with stakeholders to understand the product and then write documentation that is clear, concise, and accurate. This course would be beneficial for Technical Writers as it would provide them with a strong foundation in design patterns and how to apply them to technical writing. The course would also help them to develop the skills they need to communicate their ideas effectively.
Quality Assurance Analyst
Quality Assurance Analysts are responsible for testing software systems to ensure that they meet the requirements of stakeholders. They work with developers to identify and fix defects. This course would be beneficial for Quality Assurance Analysts as it would provide them with a strong foundation in design patterns and how to apply them to software testing. The course would also help them to develop the skills they need to communicate their ideas effectively.
Data Analyst
Data Analysts are responsible for collecting, cleaning, and analyzing data to identify patterns and trends. They work with stakeholders to understand their needs and then develop solutions that meet those needs. This course may be useful for Data Analysts as it would provide them with a strong foundation in design patterns and how to apply them to data analysis. The course would also help them to develop the skills they need to communicate their ideas effectively.
Computer Scientist
Computer Scientists are responsible for developing new computer technologies. They work with stakeholders to understand their needs and then develop solutions that meet those needs. This course may be useful for Computer Scientists as it would provide them with a strong foundation in design patterns and how to apply them to computer science research. The course would also help them to develop the skills they need to communicate their ideas effectively.

Reading list

We've selected 13 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 Design Patterns.
Comprehensive guide to Java programming, providing a solid foundation for understanding the concepts and syntax of Java. It is recommended as background reading for students who are not familiar with Java.
Provides practical guidance on writing clean and maintainable code. It emphasizes the importance of code clarity, simplicity, and testability.
Explores the principles of domain-driven design, which emphasizes the importance of aligning software design with the domain knowledge of the problem being solved. It provides a deeper understanding of the relationship between design patterns and domain modeling.
Is specifically tailored for Java developers and provides a comprehensive guide to design patterns in the context of Java applications.
Collection of best practices and guidelines for writing effective Java code. It provides insights into the nuances of the Java language and offers practical advice on how to avoid common pitfalls.
Provides a more approachable and humorous introduction to design patterns, making it a good choice for beginners or those who prefer a less technical approach.
Provides a comprehensive introduction to model-driven architecture (MDA), a software development approach that uses models to drive the design and implementation of software systems. It can provide a deeper understanding of the MVC architectural pattern covered in the course.
Examines design patterns specific to web applications, including patterns for handling user interaction, caching, and security. It valuable resource for understanding the challenges and best practices of web application development.
Covers the principles and practices of agile software development, including the use of design patterns. It provides a practical guide to applying design patterns in an agile context.
Provides a practical introduction to mobile web development, including guidance on applying design patterns to create responsive and user-friendly mobile websites.
Provides a comprehensive overview of enterprise application architecture patterns and how they can be used to design scalable, maintainable, and flexible systems.
Provides a concise and practical guide to design patterns for Java developers, with a focus on real-world examples and case studies.

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