자바 의 리 셋 메커니즘 실례 상세 설명

이 글 의 실례 는 자바 의 리 셋 메커니즘 을 서술 하 였 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
코드

interface CallBack //     
{
  void methodToCallBack( );  //    
}
class CallBackImpl implements CallBack   //            
{
  public void methodToCallBack( )
  {
    System.out.println("I've been called back");
  }
}
public class Caller
{
  public void register(CallBack callback)   //       
  {
    callback.methodToCallBack( );      //             
  }
  public static void main(String[] args)
  {
    Caller caller = new Caller( );         //B 
    CallBack callBack = new CallBackImpl( );    //A 
    caller.register(callBack);           //C 
  }
}

2 차 운행
I've been called back
세 가지 설명
반전 메커니즘 의 진정한 의 도 는 반전 을 통제 하고 반전 을 통제 하 는 것 이다.대상 이 생 성 되 었 을 때(예 를 들 어 A 처)시스템 내 모든 대상 의 외부 실체(예 를 들 어 B 처 의 caller)를 제어 하여 의존 하 는 대상 의 인용 을 기능 방법 체(예 를 들 어 C 처 의 callBack,register 로 전송)에 전달 합 니 다.
같은 인 터 페 이 스 는 서로 다른 실현 류 를 가지 고 서로 다른 실현 류 를 정의 할 수 있 으 며,이러한 서로 다른 대상 은 필요 에 따라 기능 방법 블록 register 를 주입 할 수 있다.호출 되 기 전에,이 대상 들 은 언젠가 호출 될 때 까지 호출 을 기다 리 는 상태 에 있다.
네 가지 코드

import java.awt.Rectangle;
interface Measurer
{
  //   anObject,    。       ,           
  double measure( Object anObject );
}
//     measure     
class AreaMeasurer implements Measurer
{
  public double measure(Object anObject)
  {
    //          ,  Object          ,  ,         
    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)  //       ,      
  {
    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);
  }
}

다섯 운행
average area is: 625.0
average price is: 54466.666666666664
육도 해

더 많은 자바 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
본 고 에서 말 한 것 이 여러분 의 자바 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기