Skip to main content

Lessons from Head First Design Pattern - 1

OO Basics
---------------------------
- Abstraction
- Encapsulation
- Polymorphism
- Inheritance


OO Principles
---------------------------
- Encapsulate what varies
- Favor composition over inheritance
- Program to interface, not implementations.
- Strive for loosely coupled designs between objects that interact
- Classes should be open for extension but closed for modification.
- Depend on abstractions. Do not depend on concrete classes.

OO Patterns
---------------------------
Strategy - Defines a family of algorithms, encapsulate each one, and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it.

Observer - Defines a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.

Decorator - Attach additional responsibilities to an object dynamically. Decorators provide a flexible alternative to subclassing for extending functionality.

Factory Method - Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to the subclasses.

Singleton - Ensures a class only has one instance and provide a global point of access to it.

Comments

Popular posts from this blog

JavaScript Scope

In this blog post we will dig deeper into various aspects of JavaScript scope.  This is a pretty interesting topic  and also a topic which confuses many beginning JavaScript programmers. Understanding JavaScript scope helps you write bug free programs (hmm.. atleast helps your troubleshoot things easily) Scope control the visibility and lifetimes of variables and parameters.  This is important from the perspective of avoiding naming collisions and provides memory management service. Unlike other languages, JavaScript does not have block level scope.  For e.g. take for instance the following piece of c# code. public void Main () { int a = 5; if (true) { int b = 10; } // This will throw compile time error as b is not defined // and not within the scope of function Main(); Console.WriteLine(b); } If you write the same code in JavaScript, then the value of 'b' will be available outside the 'if' block. The reason for this is JavaScript does no...

JavaScript - The this keyword

"this" is one of the most misunderstood construct in JavaScript.  To understand this first lets go through how to create a construction function in JavaScript.  A constructor function is a function which is used to create instances of objects in JavaScript. You define a constructor function using the same notation that you use to define a normal JavaScript function.  The convention to follow is to capitalize the first letter of the function name. This requirement is not enforced by the JavaScript language but it is a generally accepted practice and there are many benefits which we will shortly discuss. Let's define a constructor function to hold our menu information. function Menu() { } So, in the above snippet you have a constructor function named Menu defined. At present this function doesn't do anything good. Let's see how to invoke this function var menu = new Menu(); Let's add some public properties to this function. function Menu() { ...