アダプタモードでインタフェースの不足を解決
2906 ワード
解決策は、EntityModelでimplements Ibodyinfoを使用しないことです.getAdapterメソッドを実装します.
BodySourceのコードは以下の通りです.
これにより、Main関数でheightとweightの情報を取得できます.
以上(new EntityModel(「wangjiyuan」,22177.00,74.00)).getAdapter(Ibodyinfo.class)が実行されるとBodySourceのオブジェクトが返され、BodySourceはIbodyinfoインタフェースを実装するので、インタフェースリファレンスが実装するクラスを指すオブジェクトと同様にIbodyinfoに変換できます.処理heightとweightのコードをBodySourceクラスに入れることに相当し、BodySourceとEntityModelは集約関係であり、
return new BodySource(this);のthisは、Bodysourceで集約されたEntityModelリファレンスにEntity Modelオブジェクトを渡します.
public Object getAdapter(Class adapter){
if(adapter==Ibodyinfo.class)
return new BodySource(this);
return null;
}
BodySourceのコードは以下の通りです.
package com.wjy.understandinterface;
public class BodySource implements Ibodyinfo {
EntityModel model;
public BodySource(EntityModel model) {
this.model = model;
}
@Override
public double getHeight() {
// TODO Auto-generated method stub
return model.height;
}
@Override
public double getWeight() {
// TODO Auto-generated method stub
return model.weight;
}
}
これにより、Main関数でheightとweightの情報を取得できます.
Ibodyinfo bodyinfo=(Ibodyinfo)((new EntityModel("wangjiyuan",22,177.00,74.00)).getAdapter(Ibodyinfo.class));
bodyinfo.getHeight();
bodyinfo.getWeight();
以上(new EntityModel(「wangjiyuan」,22177.00,74.00)).getAdapter(Ibodyinfo.class)が実行されるとBodySourceのオブジェクトが返され、BodySourceはIbodyinfoインタフェースを実装するので、インタフェースリファレンスが実装するクラスを指すオブジェクトと同様にIbodyinfoに変換できます.処理heightとweightのコードをBodySourceクラスに入れることに相当し、BodySourceとEntityModelは集約関係であり、
return new BodySource(this);のthisは、Bodysourceで集約されたEntityModelリファレンスにEntity Modelオブジェクトを渡します.