Archive for the ‘Reference’ Category

Design Patterns Reference: Observer

Sunday, November 14th, 2010

The Observer Design Pattern facilitates the creation of objects that watch the state of a target object and provides state targeted functionality that is uncoupled from the core object.

The most obvious example, applications that support some type of plugin system.  Another example, cache systems, or message notification (example, members are notified when an item is in stock, to add that members may also be notified when it’s out of stock, simply add another observer, or perhaps another that texts them rather than emailing them…and so on).

When adding features to software that are activated by an action or state change but are loosely coupled, objects based on the Observer Design Pattern should be created.

MyObject is the Observable object.  It contains a protected array of observers. A public method addObserver() takes an instance of an observer and stores it in the array.

A public method doSomething() applies a state change to MyObject, whose notify() public method then loops through the array of observers.

Each such MyObjectObserver has a public method change(), that accepts an instance of MyObject, which modifies said object via a notify() method of MyObject that calls MyObjectObserver’s change() method directly as it’s encountered in the array of observers.

class CD
public $title = ”;
public $band = ”;
protected $_observers = array();

public function __construct($title, $band)
$this->title = $title;
$this->band = $band;

public function attachObserver($type, $observer)
$this->_observers[$type][] = $observer;

public function notifyObserver($type)
foreach($this->_observers[$type] as $observer)

public function buy()
// stub actions of buying

class buyCDNotifyStreamObserver
public function update(CD $cd)
$activity = “The CD named {$cd->title} by “;
$activity .= “{$cd->band} was just purchased.”;

class activityStream
public static function addNewItem($item)
// stub functions
print $item;

$title = “Wast of a Rib”;
$band = ‘Never Again’;
$cd = new CD($title, $band);

$observer = new buyCDNotifyStreamOberver();
$cd->attachObserver(‘purchased’, $observer);


memory jogger: Chain of responsibility, Polymorphism, Design Pattern reference, Decorator pattern, Singleton

Saturday, August 21st, 2010

Good stuff, take a moment to refresh and review:

Chain of responsibility:
JavaScript really OOP?:
JS Prototype object:
Design Patterns reference/list:
Decorator Pattern:
Loose Coupling def:
Singleton Pattern: