将某类的接口转换为客户所需的接口。Adapter能协调不兼容的接口,使它们共同工作。封装现有组件接口,使其适应客户端。
Target(ChemicalCompound)
定义Client要使用的特定接口
Adapter(Compound)
转换Adaptee接口为用户所要的Target接口。
Adaptee(ChemicalDatabank)
定义需要转换的现有接口。
Client(AdapterApp)
调用Target接口
代码:
//Target
public class ChemicalCompound{
protected String name;
protected float boilingPoint; //沸点
protected float meltingPoint; //溶点
protected double molecularWeight; //分子量
protected String molecularFormula; //分子式
public ChemicalCompound(String name){
this.name=name;
}
public float get BoilingPoint{
return this.boilingPoint;
}
public float getMeltingPoint {
return this.meltingPoint;
}
public float getMolecularWeight {
return this.molecularWeight;
}
public float getMolecularFormula {
return this.molecularFormula;
}
}
//Adapter
public class Compound extends ChemicalCompound{
private ChemicalDatabank bank;
public Compound(String name){
supter(name);
bank=new ChemicalDatabank();
boilingPoint=bank.GetCriticalPoint(name,”B”);
meltingPoint=bank.getCriticalPoint(name,”M”);
molecularWeight=bank.GetMolecularWeight(name);
molecularFormula=bank.getMolecularStructure(name);
}
public void Display(){
System.out.println(“Compound:”+name);
System.out.println(“ Formula:”+ molecularFormula);
System.out.println(“ Weight:”+ molecularWeight);
System.out.println(“ Melting Pt:”+ meltingPoint);
System.out.println(“ Boiling Pt:”+ boilingPoint);
}
}
//Adaptee
class ChemicalDatabank{
public float GetCriticalPoint(String compound, String point){
float temperature=0.0F;
//melting point
if(point==”M”){
if (compound.equal(”water”))
temperature=0.0F;
if(compound.equal(”benzene”))
temperature=5.5F;
if(compound.equal(”alcohol”))
temperature=-114.1F;
}else{
//Boiling Point
if (compound.equal(”water”))
temperature=100.0F;
if(compound.equal(”benzene”))
temperature=80.1F;
if(compound.equal(”alcohol”))
temperature=-78.3F;
}
return temperature;
}
public String GetMolecularStructure(String compound){
String structure=””;
if (compound.equal(”water”))
structure =”H20”;
if(compound.equal(”benzene”))
structure =”C6H6”;
if(compound.equal(”alcohol”))
structure =”C2H602”;
return structure;
}
public double GetMolecularWeight(String compound){
double weight=0.0;
if (compound.equal(”water”))
weight =18.015;
if(compound.equal(”benzene”))
weight =78.1134;
if(compound.equal(”alcohol”))
weight =46.0688;
return weight;
}
}
//adapterapp test
public class AdapterApp{
public static void main(String[] args){
Compound water=new Compound(“water”);
water.Display();
Compound benzene=new Compound(“benzene”);
benzene.Display();
Compound alcohol=new Compound(“alcohol”);
alcohol.Display();
}
}
Output
|