Design Patterns, Principles and Best Practices
Master the essential Design Principles & Design Patterns for building well-designed, loosely-coupled and robust software.
This course will help you master the essential Design Principles & Design Patterns needed for building well-designed software. These principles & patterns are extremely important when building any large, complex software. They ensure that the software is easy to understand & maintain. You will clearly understand the purpose behind the need for such principles & patterns, i.e., the critical problems that they solve. For instance, you will clearly understand the many different ways in which Class Invariants can be compromised and the measures that we need to take to ensure they are not violated.
The course starts off by first discussing the core Java Design Principles that are based on the basic Java language features like access modifiers. The design principles help us understand how to structure our classes and packages so that we can build well-designed systems that are loosely-coupled. Such loosely-coupled systems have minimal inter-dependencies among objects or modules. Such a loosely-coupled system ensures that the following goals of Software Design are met:
While the above design principles are absolute essentials when building any well-designed software, to address certain complex problems we would have to build on those design principles and employ time-tested Design Patterns. Design Patterns make it easy to incorporate any changes (ease of maintenance) and also clearly convey to other developers on how the components have been implemented. So, we next learn several important design patterns split across multiple sections. Each section is based on a more generic design principle and emphasizing a common theme among the different design patterns in that section although their intent is different. This unique classification helps you have a more solid conceptual understanding of the different design patterns and their underlying structure.
Course Introduction - Design Principles, Design Rules, and Design Patterns
Problem: Tightly Coupled System
Solution: Use Accessors for Public Fields
Design Rules for Types
Design Rules for Class Members
Problem: Mutable Components & Class Invariant
Solution: Protecting Mutable Components
Creating Immutable Classes
Prefer Static Factory Methods
Problem: Beware of Inheritance
Refer Objects via Interfaces ~ Prerequisite
Solution: Use Composition
Design & Document for Inheritance
Design Patterns: Motivation & Agenda
Dheeru Mundluru is the instructor for this program. A passionate software engineer & educator, Dheeru has around 15 years of experience developing innovative software for start-ups in Silicon Valley and elsewhere. He holds a Ph.D. in Computer Science from University of Louisiana at Lafayette (USA). He is an experienced online instructor with over half-a-dozen years of teaching experience with over 100k students globally. He has also been rated as one of the top instructors on Udemy. His engineering expertise includes developing complex Web data integration & mining software with Java as the main programming tool. Coming from start-up world, he also has extensive end-to-end experience in developing Web applications using technologies such as Spring, Hibernate, MySQL, and Solr.
Writing well-crafted code that follows the best design practices is of utmost importance to him. He brings the same level of passion and completeness to his teaching.