Observer Design Pattern in Java
Observer design pattern, class inheritance vs type inheritance
SensorSystem
is the "subject". Lighting
, Gates
, and Surveillance
are the
"views". The subject is only coupled to the "abstraction" of AlarmListener
.
An object's class defines how the object is implemented. In contrast, an object's type only refers to its interface. Class inheritance defines an object's implementation in terms of another object's implementation. Type inheritance describes when an object can be used in place of another.
interface AlarmListener {
void alarm();
}
class SensorSystem {
private Vector listeners = new Vector();
public void register(AlarmListener alarmListener) {
listeners.addElement(alarmListener);
}
public void soundTheAlarm() {
for (Enumeration e = listeners.elements(); e.hasMoreElements();) {
((AlarmListener) e.nextElement()).alarm();
}
}
}
class Lighting implements AlarmListener {
public void alarm() {
System.out.println("lights up");
}
}
class Gates implements AlarmListener {
public void alarm() {
System.out.println("gates close");
}
}
class CheckList {
// Template Method design pattern
public void byTheNumbers() {
localize();
isolate();
identify();
}
protected void localize() {
System.out.println(" establish a perimeter");
}
protected void isolate() {
System.out.println(" isolate the grid");
}
protected void identify() {
System.out.println(" identify the source");
}
}
// class inherit.
// type inheritance
class Surveillance extends CheckList implements AlarmListener {
public void alarm() {
System.out.println("Surveillance - by the numbers:");
byTheNumbers();
}
protected void isolate() {
System.out.println(" train the cameras");
}
}
public class ObservserDemo {
public static void main( String[] args ) {
SensorSystem sensorSystem = new SensorSystem();
sensorSystem.register(new Gates());
sensorSystem.register(new Lighting());
sensorSystem.register(new Surveillance());
sensorSystem.soundTheAlarm();
}
}
Output
gates close lights up Surveillance - by the numbers: establish a perimeter train the cameras identify the source