مرحبًا، اليوم أريد أن أشارككم شيئًا ما، على سبيل المثال، يتم استخدام هذا كثيرًا في JavaScript. سأتحدث عن عمليات الاسترجاعات. هل تعرف متى وكيف تستخدم هذا؟ هل تفهم حقًا استخدامه في بيئة جافا؟ عندما سألت نفسي هذه الأسئلة، لهذا السبب بدأت البحث في هذا الأمر. الفكرة وراء ذلك هي Inversion of Control (ملاحظة: شرح ويكيبيديا هو Inversion of Control، والمختصر بـ IoC)، وهو مبدأ تصميم في البرمجة الموجهة للكائنات يمكن استخدامه لتقليل الاقتران بين رموز الكمبيوتر.) هذا المثال يصف كيفية عمل الإطار، ويستند أيضًا إلى مبدأ "هوليوود - لا تتصل بي، سوف نتصل بك" المعروف جيدًا.
استخدم نمط رد الاتصال البسيط في Java لفهمه، والأمثلة المحددة هي كما يلي:
واجهة CallBack { void MethodToCallBack();} class CallBackImpl Implements CallBack { public void MethodToCallBack() { System.out.println("لقد تم الاتصال بي مرة أخرى" }}class Caller { public void Register(CallBack callback) { callback .methodToCallBack(); } public static void main(String[] args) { Caller caller = new Caller(); callBackImpl(); callBackImpl(callBack);
قد ترغب في سؤالي متى أستخدم هذا أو ما الفرق بين آلية الاتصال المباشر ورد الاتصال؟
الجواب هو: حسنًا، يوضح لك هذا المثال كيفية إنشاء وظيفة رد الاتصال هذه في بيئة جافا. بالطبع ليس هناك فائدة من استخدامه بهذه الطريقة. دعونا الآن نفحصها بمزيد من التفصيل.
الفكرة بداخلها هي قلب السيطرة. دعونا نستخدم جهاز ضبط الوقت كمثال واقعي. لنفترض أنك تعلم أن هناك مؤقتًا خاصًا يدعم عمليات الاسترجاعات كل ساعة. على وجه الدقة، هذا يعني أن المؤقت سيتصل كل ساعة بطريقة الاتصال التي قمت بتسجيلها.
أمثلة محددة:
نريد تحديث الموقع كل ساعة، وإليك نموذج UML على سبيل المثال:
واجهة رد الاتصال:
لنحدد أولاً واجهة رد الاتصال:
import java.util.ArrayList;import java.util.List;// على سبيل المثال: لنفترض أن هذه الواجهة مقدمة من نظام التشغيل لديك ليتم تنفيذهاواجهة TimeUpdaterCallBack { void updateTime(long time);}// هذا هو التنفيذ الخاص بك./ / على سبيل المثال: تريد تحديث وقت موقع الويب الخاص بك كل ساعة WebSiteTimeUpdaterCallBack Implements TimeUpdaterCallBack { @Override public void updateTime(long time) { // طباعة الوقت المحدث في أي مكان في مثال موقع الويب الخاص بك System.out.println(time }});
في مثالنا، يدعم مؤقت النظام طرق رد الاتصال:
// هذا هو SystemTimer الذي ينفذه نظام التشغيل (OS) الخاص بك// أنت لا تعرف كيف تم تنفيذ هذا المؤقت. هذا المثال فقط// يوضح لك كيف يمكن تنفيذ رد الاتصال بواسطة نفسك إذا كنت تريد ذلك.class SystemTimer { List<TimeUpdaterCallBack> callbacks = new ArrayList<TimeUpdaterCallBack>(); timerCallBack) { callbacks.add(timerCallBack); / سيتم استدعاء هذه الطريقة وسيتم استدعاء كل timerCallBack // المسجل. قد يكون لكل timerCallBack // تنفيذ مختلف تمامًا للطريقة updateTime () ويتم استخدامه بطرق مختلفة من قبل عملاء مختلفين oneHourHasBeenExprired() { for (TimeUpdaterCallBack timerCallBack : callbacks) { timerCallBack.updateTime(System.currentTimeMillis());
أخيرًا، إليك مُحدِّث وقت موقع الويب في مثالنا الوهمي البسيط:
// هذا هو عميلنا. سيتم استخدامه في مثال موقع الويب الخاص بنا. ويجب تحديث وقت الموقع كل ساعة. class WebSiteTimeUpdater { public static void main(String[] args) { SystemTimer SystemTimer = new SystemTimer(); webSiteCallBackUpdater = new WebSiteTimeUpdaterCallBack(); SystemTimer.registerCallBackForUpdatesEveryHour(webSiteCallBackUpdater);
النص الأصلي: http://cleancodedevelopment-qualityseal.blogspot.com/2012/10/understanding-callbacks-with-Java.html