首页 > 学院 > 开发设计 > 正文

(翻译)理解Java当中的回调机制

2019-11-14 21:09:26
字体:
来源:转载
供稿:网友
(翻译)理解java当中的回调机制

原文地址:http://cleancodedevelopment-qualityseal.blogspot.com/2012/10/understanding-callbacks-with-java.html

你好,今天我要和大家分享一些东西,举例来说这个在JavaScript中用的很多。我要讲讲回调(callbacks)。你知道什么时候用,怎么用这个吗?你真的理解了它在java环境中的用法了吗?当我也问我自己这些问题,这也是我开始研究这些的原因。这个背后的思想是控制反转( PS:维基百科的解释是控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。)这个范例描述了框架(framework)的工作方式,也以“好莱坞原则:不要打电话给我们,我们会打给你("Hollywood PRinciple - Don't call me, we will call you)”为人们所熟知。

简单的Java里的回调模式来理解它,具体的例子在下面:

 1 interface CallBack { 2     void methodToCallBack(); 3 } 4  5 class CallBackImpl implements CallBack { 6     public void methodToCallBack() { 7         System.out.println("I've been called back"); 8     } 9 }10 11 class Caller {12 13     public void register(CallBack callback) {14         callback.methodToCallBack();15     }16 17     public static void main(String[] args) {18         Caller caller = new Caller();19         CallBack callBack = new CallBackImpl();20         caller.register(callBack);21     }22 } 
View Code

你可能要问我,什么时候用这个或者会问直接调用和回调机制有什么不同呢?

答案是:好吧,这个例子仅仅向你展示了怎样在java环境中构造这样的回调函数。当然用那种方式使用它毫无意义。让我们现在更加深入具体地研究它。

在它之中的思想是控制反转。让我们用定时器作为现实中的例子。假设你知道,有一个特别的定时器支持每小时回调的功能。准确地说意思是,每小时,定时器会调用你注册的调用方法。

具体的例子:

我们想要每小时更新一次网站的时间,下面是例子的UML模型:

SEOqZLR6Wi5Gwl9G483T7DbJT23SUSLcf7P9cPVCAAAYPk11Llm+vul0TvivTy4WT8tNOl7Mx4t0mcuV/ZKdOlfe5GLxhM4BAEROM527vH9+/3iYKMLWos6dnJ41VCCLzo3Gm3R0Oy/Ojsar6cVtis4BAMRMI527efx4e7lPVGHroD+XzlbpclNnlm6XziWjcTb4eT2f3Sbnt2k2NLpb55LpbPNUfBgAAAZCA52brN/eX+8uzyrCJs/P+ZqcO/U+P5fpXLaqJRmt0lFyhs4BAERObZ27unvZapi5A3d5//ye9fl8lrLJekuzziXTWbYIJZnOFvNxoaB1dQ4AAIZITZ1Llq9v7+ub/L+2gcpk+Vp0+3qhhs6dJqNVsRrler7M+4joHABAjNTTuR8P7x/Pyyvxv8YJuXJ4sxfq6JwAOgcAEDe1dG6yflPekCuoqt3N44fQ8+uBi4U8i5ZMZ9kCFnQOAOAAcdoPxdyfm6y14tcp13NxZWYpe6WkKR+up3OsQwEAGCIedC5be5LTZ0+uJNvoJGOrTEadKyftyqs2T+pr6egcAMAQGcT+lgAAAI6gcwAAEDPoHAAAxAw6BwAAMYPOAQBAzKBzAAAQM+gcAADEDDoHAAAxMwida5KvAAAAQKC5zuXZ5iqbewlZ6HyloHPJPwcAACDQVOeS5atmB+fWtrUs8onPx4tU3YgLAABgJ8107vL++f3jYaLJJ97m3s1kEgAAAFca6dzNY5YrXBa2ydp7AvEtRX8una1SMQsBAABALRroXJlAVdK5m8ePt8cfN4/blAX+kqwyPwcAAHtSW+eu7l62C0wqOif8N1m+es/Ow3pLAABwpKbOyeql6c8JH/7x8P7xvLzq/7cBAADU0zlFuio6J83PoXMAABAMtXRusn4rM4ZLPEwqA5X5msy+fxgAAMCp434omvcKth24SvcOAACgP3zoXN6Hyzt5iBwAAITDIPa3BAAAcASdAwCAmDkgnVs8LTcG/uVUT6fYzu0QIPQ4ZTrVTQtwQDoHAAAHCDoHAAAxg84BAEDMxKtzyWhFvroBgb+iAVeCA21WG3QOwgB/RQOuBAcOXuec8hV0GGzJdLZ5WoaQMygvSYcLmbwxUH+NxuXisQAQQBCgcxnUjUaEpXM/Ht6lRDxC5jkBKYOBK3vln+u83VxNzxs61bcUjcab4bYvgftrB+e3ad9tWRs1yr0kg62H/gmgbgyCkHQuWb6+yTpXwWe+giKf+Hy8SJfNGvHAg62FVul6vtyko6T3n+ZukID9tYMA2jJ0LlACqBuDIBydy3MRVPa3FGghz6pbALdltYuFl9akJZ3rIJxaMmzg/tpBAG2ZQ40amCsDoWmN6qRuRGDzYHSuyEVg0TnPyeeK/lw6W6XLTaNZujasloxWT3KfyTgEf36bLlfT83LCrLhKnEITEH6a6Z6j8SYdJZlNdDNwJp2TvrHygev5tgyyucyzC9kNPYtHv/7KbJudTUdJdmHuFKMrFXdrjK/9Ott3WQrpqUbJQTQYVwZCtUadnZxagshcN2xRafZX167s2rYB6Nxk/fb+end5pslXUJAsX4vP+CCo+TnrpE61Kp/fpmINvlgo15qevkdjofpeLJT2UZC3ZDrLPylV/aXSCJ6OxsL3KsXIHiO2QXt+O73YXQyxMB6fUvv1l6Q6s1U6vi4dVLgyN5S22dL90WRD23dZLO9ao3b284J3ZSAYapQ5iLZ/0dUNY1Ra/NW9K7skCJ27unvZri4x6Zz4GZ/0v94ye14z1zCDzgnPfWpnS19l82f27V9KMTvLK3F5SeUH1hm3FD8j3bx+MeSf4G1GsF9/bW2bjFZ5o7MdnlJdqbOGvgLobbjruwyWd6tR9VYnBezKQDDVKHMQSTXBHpiSKy3+6t6VXdKyzn0++uXPb8fHx8ff//7DphpyrJtB58oOXwh4s1o2Tti0Kqt/qdcqXeh2vBV1zlYMk84JgyrSIIlZF63FaGycIfhr24KUfpF1TvthWwUw29D2XRbLu9Wok7IjuMO8AboyEGyWqfFwqdc5U1Ra/dW5K7ukZZ37NVO5f/785ehng84ps25anWurMxeE1Rz7c046Z/wWJ527nks1XviM5TGz3kx7wJ0Ap/6cf53TF2CXzhmK7axzwuWmJjJgVwaCoUbVWWOi+Yw5Kuv4q0NXdknLOvdt57jlZK15Q055u2Cytr5sMHyruczPNW6VrGHjonPq1Jr4GSXY6hajLEzQkzrN5+fq6lz9cUu9fRpp6r41qoZng3dlIGhrlDmILDa3ReVuf3Xpyi7pbn7ue739UKr9uau7l2wpZu/GatVqxmel5jqnXdxhXzTlonPSpE4+VLL9TPZzxAGTYgrdvnZrMIv06vurvvaUk2r2CmC2ku27LLZ1rFEy6uqVwbgyEKo1yhxEJsftiEqrv7p2Zde27UDnvn756ZOjzgXXmWvRatLIkm5Jd/alO1ulIkIqs1/qPaUJ6ubzc8K35KvSjdNIkrmMxRjYS1f1/LVT54RLxKbEXAHMNrTqnNnyjjVKuVtlieaAXBkI1bFlfRDZ6oY5Ki3+6sGVXdKyzn09LqbnfvkzzP0tg7Ma+CdcfwXwDviwCNeVEDBtr7f8z9fj4+Pvf/129Pk/6Bz0RLj+QucaEq4rIWBa1rmfC6X7+vuv6Bz0RLj+QucaEq4rIWCCeE8cAABggKBzAAAQM+gcAADETLw6xyTBsMBf0YArwQHm50KzGvgHf0UDrgQHDl7n+s9X4BlzajfbKd8k01lA++CF7C9oBK5sibjbjbB07seDsrPlaZ5nvNj0MtL8c2bE/TIafWOjzevUXTkMuwE1AJ2DVvDsSuf46vL3Omy4RbtRNWMoOpcsX9UdnC/vn4X/3jz6lLoin/h8vEgb1oaO2s1KlsV5/RrQvL7u2GWxGegctIJPV+4TX13+3qY6R7uhNWMYOpdLmrS/pZyaTpU9X7+/+eNSJ+3m9XyfFBh71FcfLy8PTefqZQuC3vEXevvFV5e/t1nNpN0wmDEInbt5zJISyPs4y5s4q7K3H0V/Lp2t0oaZA7vQOctu4ienyr6rmrrls77av0tI6ijvM7utr/nGsv31qOz+Gm5WrQPEa8rc5vGV52Qvz1aqjTYcTkfjTTpKhE2ZJenSTYDpdmqWmyn9tBntRqvVRkMDnSvThSv5Cq7uXsSkdIczP2d/jhuNhaqsrdl71Fcl1aftuyojJGLynezvam6RPjD7y5pJDsLDV+hZ40vOAijmJCpmpPL/1g2HrSYJCZKK+0upQir5j0zlNF1Fu9FqtdFRW+fEdOGafOLbeTuPnbktoa63HI3Vhz4zxuRwLcwni9+lSwp6Up5KR0kIImf2167M4BAevkLPFl+VQeyyBZeyu53WDgf168pfkXcQt59Ub2LOmay/inaj1Wqjo6bOyaORis5lKzDXN6Xa+Ze6sKyWs6u+Cr1+7bDAPuMPupTEuu8ypyoWhix6Fzm9v7IRJNMjjhLA4rWc6uuUyZVOWOJL6ZeciWJjS9RnCQdzfkcxvZxucFKvc+araDe09K9zPx7eP56XV+J/5QWWgrCFknO1q3FL0/PR9VwKBj/PZerAen5/83fZpp3z57LROIhRQfpz0eB13FJfMx11zroKw6pzthpo1jn9VbQbrVYbHbV0brIWpt8kHibbxSnFh/2vtwzPagXqCImA7rmprfpq+y6lKotsx9mzB7SetYT5uWjwFnrm+KpKS6lSu/pztnFL7aldaxTN45a26KbdaKvaaHDaD6X6XoG5e9cb3byPpQ5Sb9+DkapyPjjge/yhaPqt31UtYXU+OYRuE+sto8Fj6BnjS2mIK+FgkgpzOJh1bmeDXlmZsvMq2o1Wq02F/XXuRFqEEojItWw1GXEgXvjGfMVtPvcrLhbVLUfOLzSfUueTpbpl/i5LCeX3YPL79yZ1vD8XDZ5DzxBf8tyS0N236pzlhmadO60GpiIzQgCKN7FeRbvRarWRGMT+lsFZDfyDv6IBV4ID6FxoVgP/4K9owJXgADrnxWq6Zb45/zqdinUMzbuhatmQxjEaPIVerPEVK/t6GZ0DAABwA50DAICYQecAACBm0DkAAIgZdA4AAGJmEDrnlK8AAADAReey7ATyDpaX98/b/VDy3D0+2Cv/XPg0Sc8BAIOEMA+Apjq33eLLkE9cyWywL0U+8fl4kS79ZK0NhYvF0+x2attqCAAGDmEeBM10Ls9FUMnLI/Th5Ex1XrCn3x0m276pLSEWAAwZwjwQGulckYJH1Lmruxe5A3d5//z+enfpp3xFfy6drdJlPM9E4pv/Mao4ABDm4dBA5ybrt1zAVJ2T5uQ85p+LdH7u/DaVsqlZUtQDwDAhzAOits6JelbNP7ftwF3dvVRWqewN6y0BAMCRmjonz7qp+eduHrfJ517vJj7HLQEAAPains4pqyhVnZOYrINJtQoAAAdPLZ2brIV04RJVtVOWXwIAAPSJ034opv7c1d1LtiCz718FAACQ4UHnhM1QPL4hDgAA4IFB7G8JAADgCDoHAAAxg84BAEDMoHMAABAz6BwAAMQMOgcAADGDzvWHuJ05AEQJYR4A6Fx/EAAA0UOYB8AgdC7SfAWhBECk5gUIgWZhfn6bkpHVP7V17seDsrmltImlcNbjvl+R5p8rcNC50XjztMwQU1thXoBAQecCoJHOGXIU/HgoZc/zFpdFPvH5eJEuN0H0fvzRVOdG4802JXEyWnmQuqjNCxAC6FwA7K9zcmo6Me24L2JNOb87AC4W5Q9XA+B6vtyko6Ql84YypgowcPYL84ERaruxt86JecbPToqcq742dC46HOlslS5jyzpvrxPJaPUkKJmqRheLp/17YDbzJtPZJsrHC4AuaRTmhc5l0bd5Up9ly78/VeRQmNSo31Qabnh+my5X03NTMaTvkosRZrvhOD9XCpuYgjXTvHtF+dw52AmkrK5Iw5KjcalqmeZN9+3m7jZvVpsPw+YAHaMJ80znSl25WIgfGI2FD8unnAa9kulMUMSLRRnsRTHy/6rFMFx1InwgrHbDZb1llognn4Tb6tzV3Uv5D7+pVg9rQeD1fKl5INrq3Pbx0NtwrtW86vMmAHhAH+aZwAjhdj03CoZ0SnwOros4XqrcxFKMvKu3vUoWy4LA2o2tzn39cnT05WvN9wqS5WsxCZfp3H2lV0dKcRey0Uid6mRVcFrp1XUxPmAuFQA0xhJQuml45b9PS9NI46bRXEZVGssmxVKMrPAK2t8SULvhpnPCYpOru5ePN2nqThzJBAuGgXv9g172fCRWGpcnOLdCBvRcBjAwGoW5Veeu51ILoOvqNVG7PXRu9+N1YO2Gm87dPH5s11iq6y0v7589r7eMFfMEtXHgXqh5yXTWejUKb5wdYGDsF+ZqR8rc1bPcxFyw6rhlpqOWYtS4eXjthovOTdbVDpz0/hyDlrVothBL8/6c8lSVj2noqpfllIkw100BDAyn9ZbbD6gCU3zSGtHyshEzcgdRvMrWrbS3DGG2G3V1Llt7kiP03nKE1ZiIXF2avVhzcnomLefVj3joq77llHPZAKAG+78mu/1vPnmRb4ckLpCWXg9osoOEOOEnXLVjmlD5OrmEIbYbss79Feb+lpESap0AAG8Q5gEg6dynT+hchxAAANFDmAeApHM/fUHnOoQAAIgewjwAHN8rAAAAGAToHAAAxAw6BwAAMTOIfOKRwsA9QPQQ5gGAzvUHAQAQPYR5AAxC5yLNV0AAAEQPYR4Ajvnnqvue5BumVLdK2YPI888RAADRQ5gHwN75xM/yPS1f7m+UDZ19UCS8no8X6f7pswODAACIHsI8APbXuZvHPAuPmrjAG90lWusWAgAgegjzAPDRn8tpQ+eK/lw6W6WhpOzzBgEAED2EeQA4zs/pkhL417nI5+cAAKB9XNZbZktOXu4T+e+tjVvGut4SAADax+29gmT5+lZJGt6ezgEAADji+P7cZI3O7Q0D9wDRQ5gHgJvO3TxqXpVD5xpCAABED2EeAC46N1m/6dZeonMNIQAAoocwD4BS5759/fLrZ6PO5dudZMhiNlm/KVulvOdv1IEVAgAgegjzACh07uuXz59+/fNbmPtbRgoBABA9hHkAHB0d/fX9+Ptfvx39/Me3UPdxjhQCACB6CPMAODo6+uNbnmQ12HwFflg8LTcG/u3wVLmBWSUAAilhP9YA8EEgQTToMI8vKrNxy4PQOQAAOEAynWPcEgAA4uTo6Ojv4+Pj47+//MQ6FAAAiA7hvYK//vdn83sFw4Pp32GBv8ABqg3mrYHjvl8DIBYPHQr4Cxyg2mDeGpTzc59+++8/geqcU76CgXpoNC4XPh1UEiJv/jq/TQ/MdIdM72Eed8D2bl5PFP25719//+3nz5/q5p9TUtCJW6LoUtM5slf+uWF76PAaa3QOHAglzCOtdaGYd1885BOfrIWdwH48eJW6Ip/4fLxIl5tGFh+2hyINGwvoHDgQSphHWutCMe++eNA5mRZ2c05GK4dXF8Py0MWi2U/oJGyCMtFehRHNO/AWJyinhE9b5iJge/rGdghc54r+XDpbpctNo1m6cDyUjFZPy006SuS/X8+3GxBUy6kPm2Q6M04GiPMEiqHMp7IbBrH9gbO/VPPmpittJVve0YZmDDc8v02Xq+m5qRiWeZ2AnBI+bYQ5Aduqefugkc7VmYS7efx4e7lPvBQugvm5rF6upufy3zP9FprmqfK7dGEzGgv3uViIt7V0eXf2hrOg6r0D5OQvnXnPb1NRV2RDudlwRwG2LdHForRkUYz8v2oxDFcF5pTw8R3mBGyr5u0Ll/cKshw9WjGbrNtIyjPU9ZbZA2C1ysqNo5bdwyDXc+EDo7Fx8tJySrKV5gG2U5r7y2De89tU+i2SodxsaKQyulXexFKMvKu3oz6E4JTw8RrmBGyr5u0Rt/fnkuXr2/vr3aX892zVpa/O3MA9dLEwj31ZWt4CfdgIIyeaUTLbiIr+VN0Ch+cvS2lV0ynWdrKhgWqTVD6MW4pxodvJV/tb+nZK+HgLcwK2VfP2jON74pO1qnOWTl4/BOAhW4ejedhcz6VqrYs91+AJoevgtz9n0Ln9bFhhD53bPUAaglPCp4v+3AEHbACtqBfcdO7mUckqns3e+V1mGYWHtMP9SgDoqIaNOotjfsa0hKV+FiGIqSC/83OWjtS+NlTKXB23zDxrKUaNmwfilPDpZH7ucAM2jFZ0f1x0brJ+k9ZeBihyQXmo+vCV/UUcxNg9rS3N9+TjIfq6Ls94W08FtLTP93rL7QdUgdnXhhJyCyheZetW2s0ekFPCp5v1lgcbsOG0ovtRV+eyYckcSdKS5eubslWK311RovBQdahKnKQpyyktRFbOZsH2tMyeN8XVp8pV1cDQngrLRK29Pyc9RzvZ0I44ByNctWOaUHW0VMJgnBI+3b0/d5ABG0ttZB9nCAP8BQ5QbTBvDdA5CAP8BQ5QbTBvDdA5

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表