Structural Design Patterns
Decorator - Adds Additional functionality to a class
Adapter - "adapts" one interface for a class into one that the client expects
Façade - creates a Simplified interface from an existing one
Flyweight - A high Quantity of objects share common properties to save space.
Bridge - decouples An abstraction from its implementation so that the two can vary independently.
Behavioral Design Patterns
Chain of Responsibility - Linked list of handlers
Command - Enables All the info for a request to be contained within a single object.
Interpreter - Developing domain specific languages
Iterator - Sequentially access elements of an aggregate object.
Mediator - Removes The need for classes to communicate with each other directly.
Observer - Allows Objects to be linked. Changed ones are auto reflected in others.
State - Allows Objects to change their behavior
Strategy - Similar Algorithms are defined in their own class.
Template - Defines a Group of interchangeable similarly structured algorithms
Visitor - Separates Structured data from the functionality that may be performed upon
Memento Pattern - Used in undo frameworks to bring object back to previous state.
UML Diagram - Aggregation (HAS - A)
Inheritance - (IS - A)
Diamond = Aggregation = Denote multiplicity = Can survive individually.
Composition - cannot Survive individually
Reflection - Gives Program ability to manipulate values, metadata in runtime.
Test Driven Development
Top Down - Emphasize On planning complete overall understanding of system
Bottom Up - Emphasize coding and testing
Test Driven - Design Modular classes and decide what needs to be coded or tested.
Levels of testing
Unit Testing - Testing each module
Integration Testing - Tests the interfaces between modules. Hard AF
Regression Testing - Done after modification to ensure that the correct behavior of the original Program is preserved.
System testing tests Overall behavior in an integrated environment.