Software design patterns

Design patterns are succssful empirical solutions to sets of general problems in software development

They are known and developed by software engineers

One of the first big books on it

Object oriented programming benefits and challenges?

 * code reuse
 * define classes and objects
 * define their responsibilities
 * reuse of software components
 * portability
 * extensibility

Principles

 * program to interface not to implementations
 * This allows you to if you switch a class or something maintain things with an interface
 * Nothing to do with UI or UX
 * favor composition over inheritance

Examples

 * MVC was one of the first design patterns invented in Palo Alto in the 70s

Advantages of using design patterns

 * Makes it easier to start a project


 * makes it easier to ensure you make scalable infrastructure

Creational

 * factory
 * abstract factory
 * singleton

Structural

 * adapter

Behavioral

 * Template method
 * command
 * observer
 * state
 * Strategy pattern