Class::Observable - Base class for observable classes/objects ============================= # Define an observable class package My::Object; use base qw( Class::Observable ); # Tell all classes/objects observing this object that a state-change # has occurred sub create { my ( $self ) = @_; eval { $self->_perform_save() }; if ( $@ ) { My::Exception->throw( "Error saving: $@" ); } $self->notify_observers( 'create' ); } # Define an observer package My::Observer; sub update { my ( $class, $object, $action ) = @_; unless ( $action ) { warn "Cannot operation on [", $object->id, "] without action"; return; } $class->_on_create( $object ) if ( $action eq 'create' ); $class->_on_update( $object ) if ( $action eq 'update' ); } # Register the observer class with all instances of the observable # class My::Object->add_observer( 'My::Observer' ); # Register the observer class with a single instance of the # observable class my $object = My::Object->new( 'foo' ); $object->add_observer( 'My::Observer' ); # Register an observer object the same way my $observer = My::Observer->new( 'bar' ); My::Object->add_observer( $observer ); my $object = My::Object->new( 'foo' ); $object->add_observer( $observer ); # Register an observer using a subroutine sub catch_observation { ... } My::Object->add_observer( \&catch_observation ); my $object = My::Object->new( 'foo' ); $object->add_observer( \&catch_observation ); # Delete a single observer; delete all observers My::Object->delete_observer( $observer ); My::Object->delete_observers(); # More... see the docs INSTALLATION To install this module perform the typical four-part Perl salute: perl Makefile.PL make make test make install DEPENDENCIES This module requires these other modules and libraries: Class::ISA COPYRIGHT AND LICENCE Copyright (c) 2002 Chris Winters. All rights reserved. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. AUTHOR Chris Winters