欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java的回調(diào)機(jī)制實(shí)例詳解

 更新時(shí)間:2019年08月08日 09:58:42   作者:cakincqm  
這篇文章主要介紹了Java的回調(diào)機(jī)制,結(jié)合實(shí)例形式詳細(xì)分析了java回調(diào)機(jī)制相關(guān)原理、用法及操作注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了Java的回調(diào)機(jī)制。分享給大家供大家參考,具體如下:

一 代碼

interface CallBack // 回調(diào)接口
{
  void methodToCallBack( );  //回調(diào)方法
}
class CallBackImpl implements CallBack   // 實(shí)現(xiàn)回調(diào)接口和回調(diào)方法
{
  public void methodToCallBack( )
  {
    System.out.println("I've been called back");
  }
}
public class Caller
{
  public void register(CallBack callback)   // 注冊(cè)回調(diào)接口
  {
    callback.methodToCallBack( );      // 通過(guò)回調(diào)接口調(diào)用回調(diào)方法
  }
  public static void main(String[] args)
  {
    Caller caller = new Caller( );         //B處
    CallBack callBack = new CallBackImpl( );    //A處
    caller.register(callBack);           //C處
  }
}

二 運(yùn)行

I've been called back

三 說(shuō)明

回調(diào)機(jī)制的真正意圖,就是實(shí)現(xiàn)控制反轉(zhuǎn),通過(guò)控制反轉(zhuǎn)。對(duì)象在被創(chuàng)建的時(shí)候(如A處),由一個(gè)能夠調(diào)控系統(tǒng)內(nèi)所有對(duì)象的外界實(shí)體(如B處的caller),將其所依賴對(duì)象的引用傳遞給功能方法體(如C處的callBack,被送入到register)。

同一個(gè)接口,可以有不同的實(shí)現(xiàn)類,從而使得這些不同的實(shí)現(xiàn)類,可以定義眾多不同的對(duì)象,而這些不同的對(duì)象會(huì)被按需注入功能方法塊register。在被調(diào)用前,這些對(duì)象永遠(yuǎn)處于等待調(diào)用狀態(tài),直到有一天被回調(diào)。

四 代碼

import java.awt.Rectangle;
interface Measurer
{
  // 這個(gè)anObject,并不明確。不明確的用意是,先不綁定任何特定的對(duì)象
  double measure( Object anObject );
}
// 把抽象的measure方法具體化
class AreaMeasurer implements Measurer
{
  public double measure(Object anObject)
  {
    // 把抽象的對(duì)象明確化,由于Object對(duì)象是所有對(duì)象的鼻祖,所以,它可以化身任何對(duì)象
    Rectangle aRectangle = (Rectangle) anObject;
    double area = aRectangle.getWidth() * aRectangle.getHeight();
    return area;
  }
}
class Car
{ 
  private double price;
  private double taxRate;
  
  Car(double price, double taxRate)
  {
    this.price = price;
    this.taxRate = taxRate;
  }
  public double getPrice()
  {
    return price;
  }
  public double getRate()
  {
    return taxRate;
  }
}
class CarMeasurer implements Measurer
{
 
  public double measure(Object anObject)
  {
    Car aCar = (Car) anObject;
    double totalPrice = aCar.getPrice() * (1 + aCar.getRate());
    return totalPrice;
  }
}
class Data
{
  public static double average(Object[] objects, Measurer meas)  // 前者提供數(shù)據(jù),后者提供方法
  {
    double sum = 0.0;
    for (Object obj : objects)
    {
      sum = sum + meas.measure(obj);
    }
    if (objects.length > 0)
    {
      return sum / objects.length;
    } else {
      return 0;
    }
  }
}
public class callBackDemo
{
  public static void main(String[] args)
  {
    Measurer areaMeas = new AreaMeasurer();
    Rectangle[] rects = new Rectangle[]
    {
      new Rectangle(5, 10, 20, 30),
      new Rectangle(10, 20, 30, 40),
      new Rectangle(20, 30, 5, 15)
    };
    double averageArea = Data.average(rects, areaMeas);
    System.out.println("average area is: " + averageArea);
        
    Measurer carMeas = new CarMeasurer();
    Car[] cars = new Car[]
    {
      new Car(20000, 0.12),
      new Car(30000, 0.16),
      new Car(90000, 0.18),
    };
    double averagePrice = Data.average(cars, carMeas);
    System.out.println("average price is: " + averagePrice);
  }
}

五 運(yùn)行

average area is: 625.0
average price is: 54466.666666666664

六 圖解

更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java面向?qū)ο蟪绦蛟O(shè)計(jì)入門與進(jìn)階教程》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 通過(guò)自定制LogManager實(shí)現(xiàn)程序完全自定義的logger

    通過(guò)自定制LogManager實(shí)現(xiàn)程序完全自定義的logger

    本章主要闡述怎么完全定制化LogManager來(lái)實(shí)現(xiàn)應(yīng)用程序完全自定制的logger,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • Springboot整合Redis實(shí)現(xiàn)超賣問(wèn)題還原和流程分析(分布式鎖)

    Springboot整合Redis實(shí)現(xiàn)超賣問(wèn)題還原和流程分析(分布式鎖)

    最近在研究超賣的項(xiàng)目,寫一段簡(jiǎn)單正常的超賣邏輯代碼,多個(gè)用戶同時(shí)操作同一段數(shù)據(jù)出現(xiàn)問(wèn)題,糾結(jié)該如何處理呢?下面小編給大家?guī)?lái)了Springboot整合Redis實(shí)現(xiàn)超賣問(wèn)題還原和流程分析,感興趣的朋友一起看看吧
    2021-10-10
  • 詳解SpringMVC中的@RequestMapping注解

    詳解SpringMVC中的@RequestMapping注解

    這篇文章主要介紹了SpringMVC中@RequestMapping注解,@RequestMapping注解是一個(gè)用來(lái)處理請(qǐng)求地址映射的注解,可用于映射一個(gè)請(qǐng)求或一個(gè)方法,可以用在類或方法上,需要的朋友可以參考下
    2023-07-07
  • Spring整合Mybatis方式之注冊(cè)映射器

    Spring整合Mybatis方式之注冊(cè)映射器

    這篇文章主要介紹了Spring整合Mybatis方式之注冊(cè)映射器,MapperFactoryBean注冊(cè)映射器的最大問(wèn)題,就是需要一個(gè)個(gè)注冊(cè)所有的映射器,而實(shí)際上mybatis-spring提供了掃描包下所有映射器接口的方法,每種方式給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2024-03-03
  • 詳解hbase與hive數(shù)據(jù)同步

    詳解hbase與hive數(shù)據(jù)同步

    這篇文章主要介紹了詳解hbase與hive數(shù)據(jù)同步的相關(guān)資料,需要的朋友可以參考下
    2017-09-09
  • @JsonSerialize序列化注解的使用

    @JsonSerialize序列化注解的使用

    這篇文章主要介紹了@JsonSerialize序列化注解的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Spring Boot集成spring-boot-devtools開(kāi)發(fā)時(shí)實(shí)現(xiàn)熱部署的方式

    Spring Boot集成spring-boot-devtools開(kāi)發(fā)時(shí)實(shí)現(xiàn)熱部署的方式

    這篇文章主要介紹了Spring Boot集成spring-boot-devtools開(kāi)發(fā)時(shí)實(shí)現(xiàn)熱部署的方式,文中還給大家提到了spring boot 實(shí)現(xiàn)熱部署的方式及集成注意事項(xiàng),感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧
    2018-05-05
  • 如何利用jwt來(lái)保護(hù)你的接口服務(wù)

    如何利用jwt來(lái)保護(hù)你的接口服務(wù)

    項(xiàng)目軟件要對(duì)外提供部分定制接口,為了保證軟件數(shù)據(jù)的安全性,這篇文章主要給大家介紹了關(guān)于如何利用jwt來(lái)保護(hù)你的接口服務(wù)的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • 詳解Spring Kafka中關(guān)于Kafka的配置參數(shù)

    詳解Spring Kafka中關(guān)于Kafka的配置參數(shù)

    這篇文章主要介紹了詳解Spring Kafka中關(guān)于Kafka的配置參數(shù),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • servlet之session簡(jiǎn)介_(kāi)動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    servlet之session簡(jiǎn)介_(kāi)動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了servlet之session簡(jiǎn)介,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07

最新評(píng)論