hi sen We can see the use of callbacks in Java event model where objects registers themselves as Listeners and gets notified when the event occurs. That is a kind of Callback only I would say. Also, you can look for Observer and Observable classes which are also callback examples. You can refer to the site - http://www.dickbaldwin.com/java/Java077.htm to see a possible approach for implementing callbacks. To me callbacks can be simply implemented by the same logic the event model uses with 'registering' listeners and make observer and observable objects follow some interface so we can call callback methods. Now, if we are coming from C background then callbacks are really simple out there. Just cast funtion pointer to unsigned int if you will and it will work. If we want to have a callback mechanism where we wouldn't like to make the called back object follow some interface and have ability to pass the method name as string while registering the callback then we would endup using Reflection to invoke the method when the callback needs to take place... Hope I didn't confuse you. Regards Maulin
I find Observer and Observable overly complicated. I wrote my own base publisher class that adds and removes subscribers and requires me to hand-code the actual messaging methods like this:
A simple call to myPublisher.myMethod() gets forwarded to all subscribers. The publisher and subscribers both implement an interface that defines the events or methods that can occur. Note that this lets me fire any method on subscribers, pass any parameters, and even make use of return values if I want to. My Messaging Patterns page has a section on Pub-Sub that shows a couple variations. Hope that helps!
A good question is never answered. It is not a bolt to be tightened into place but a seed to be planted and to bear more seed toward the hope of greening the landscape of the idea. John Ciardi
All of the world's problems can be solved in a garden - Geoff Lawton. Tiny ad:
RavenDB is an Open Source NoSQL Database that’s fully transactional (ACID) across your database