From 8983f9c11ce69f18661479ef40512bbab0c98bb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Wed, 26 Aug 2020 21:54:44 +0300 Subject: [PATCH] Update README.md --- callback/README.md | 18 ++++++++++++------ callback/etc/callback.png | Bin 8577 -> 18256 bytes callback/etc/callback.urm.puml | 5 ----- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/callback/README.md b/callback/README.md index 78766cc15..34543f0bb 100644 --- a/callback/README.md +++ b/callback/README.md @@ -9,14 +9,16 @@ tags: --- ## 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. + +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. +> 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 @@ -24,7 +26,9 @@ In plain words 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. +> 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** @@ -61,7 +65,7 @@ public final class SimpleTask extends Task { } ``` -Finally here's how we execute a task and receive a callback when it's finished. +Finally, here's how we execute a task and receive a callback when it's finished. ```java var task = new SimpleTask(); @@ -69,13 +73,15 @@ Finally here's how we execute a task and receive a callback when it's finished. ``` ## Class diagram + ![alt text](./etc/callback.png "Callback") ## 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](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CyclicBarrier.html#CyclicBarrier%28int,%20java.lang.Runnable%29) constructor can accept callback that will be triggered every time when barrier is tripped. +* [CyclicBarrier](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CyclicBarrier.html#CyclicBarrier%28int,%20java.lang.Runnable%29) constructor can accept a callback that will be triggered every time a barrier is tripped. diff --git a/callback/etc/callback.png b/callback/etc/callback.png index a81745871a642705dad3be5fe90fc7abacb7185c..7b499f79fcaa1484dcdd485668c14549eef79b6e 100644 GIT binary patch literal 18256 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 Peyvbb(N->dY!&ujDtTa# diff --git a/callback/etc/callback.urm.puml b/callback/etc/callback.urm.puml index a666a4fdb..2d213eda8 100644 --- a/callback/etc/callback.urm.puml +++ b/callback/etc/callback.urm.puml @@ -8,11 +8,6 @@ package com.iluwatar.callback { interface Callback { + call() {abstract} } - class LambdasApp { - - LOGGER : Logger {static} - - LambdasApp() - + main(args : String[]) {static} - } class SimpleTask { - LOGGER : Logger {static} + SimpleTask()