* Changed database implementation. Removed static objects. * Fix Logs * Fix 40 errors from checkstyle plugin run. 139 left)) * Fix CacheStore errors from checkstyle plugin 107 left * Fix last errors in checkstyle. * Fix sonar issues * Fix issues in VALIDATE phase * Fix Bug with mongo connection. Used "Try with resources" * Add test * Added docker-compose for mongo db. MongoDb db work fixed. * Provided missing tests * Comments to start Application with mongo. * Fix some broken links * Remove extra space * Update filename * Fix some links in localization folders * Fix link * Update frontmatters * Work on patterns index page * Work on index page * Fixes according PR comments. Mainly Readme edits. * fix frontmatter * add missing png * Update pattern index.md * Add index.md for Chinese translation * update image paths * update circuit breaker image paths * Update image paths for localizations * add generated puml * Add missing image * Update img file extensions * Update the rest of the EN and ZH patterns to conform with the new website Co-authored-by: Victor Zalevskii <zvictormail@gmail.com>
2.0 KiB
title, category, language, tags
| title | category | language | tags | |
|---|---|---|---|---|
| Callback | Idiom | en |
|
Intent
Callback is a piece of executable code that is passed as an argument to other code, which is expected to call back (execute) the argument at some convenient time.
Explanation
Real world example
We need to be notified after executing task has finished. We pass a callback method for the executor and wait for it to call back on us.
In plain words
Callback is a method passed to the executor which will be called at defined moment.
Wikipedia says
In computer programming, a callback, also known as a "call-after" function, is any executable code that is passed as an argument to other code; that other code is expected to call back (execute) the argument at a given time.
Programmatic Example
Callback is a simple interface with single method.
public interface Callback {
void call();
}
Next we define a task that will execute the callback after the task execution has finished.
public abstract class Task {
final void executeWith(Callback callback) {
execute();
Optional.ofNullable(callback).ifPresent(Callback::call);
}
public abstract void execute();
}
@Slf4j
public final class SimpleTask extends Task {
@Override
public void execute() {
LOGGER.info("Perform some important activity and after call the callback method.");
}
}
Finally, here's how we execute a task and receive a callback when it's finished.
var task = new SimpleTask();
task.executeWith(() -> LOGGER.info("I'm done now."));
Class diagram
Applicability
Use the Callback pattern when
- when some arbitrary synchronous or asynchronous action must be performed after execution of some defined activity.
Real world examples
- CyclicBarrier constructor can accept a callback that will be triggered every time a barrier is tripped.
