#include #include using namespace std; class Gates { public: void closeGates() { cout << "gates close\n"; } }; class Lighting { public: void turnOnLights() { cout << "lights up\n"; } }; class Surveillance { public: void trainCameras() { cout << "cameras train\n"; } }; class SensorSystem { Gates gates; Lighting lights; Surveillance cameras; public: void soundTheAlarm() { gates.closeGates(); lights.turnOnLights(); cameras.trainCameras(); } }; void main( void ) { SensorSystem ss; ss.soundTheAlarm(); } #if 0 class AlarmListener { public: virtual void alarm() = 0; }; class SensorSystem { vector listeners; public: void registerListener( AlarmListener* al ) { listeners.push_back( al ); } void soundTheAlarm() { for (int i=0; i < listeners.size(); i++) listeners[i]->alarm(); } }; class Gates : public AlarmListener { public: void alarm() { cout << "gates close\n"; } }; class Lighting : public AlarmListener { public: void alarm() { cout << "lights up\n"; } }; class Surveillance : public AlarmListener { public: void alarm() { cout << "cameras train\n"; } }; void main( void ) { SensorSystem ss; ss.registerListener( new Gates() ); ss.registerListener( new Lighting() ); ss.registerListener( new Surveillance() ); ss.registerListener( new Gates() ); ss.soundTheAlarm(); } #endif