适配器模式:将一个类的接口转换成希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。
生活中的例子就是港版的手机,在大陆用的话不能直接插入到插座中,需要把钢板的充电器加一个适配器,转换成大陆的插座可以插入的样式。
代码如下:
//定义了大陆和香港两个接口
interface power_hongkong{
public void hongkong_insert();
}
interface power_dalu{
public void dalu_insert();
}
/*hongkong_iphone实现了power_hongkong接口,在这个接口中是实现了接口中的抽象方法*/
class hongkong_iphone implements power_hongkong{
private String plug_type = "三头插座";
private boolean flag=false;
public void hongkong_insert() {
if(!flag){
System.out.println("把香港的"+getPlug_type()+"手机插头插入到大陆的插座中不可用");}
else {
System.out.println("把香港的"+getPlug_type()+"手机插头插入到大陆的插座中可用");}
}
public String getPlug_type() {
return plug_type;
}
public void setPlug_type(String plug_type) {
this.plug_type = plug_type;
}
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
}
/*dalu_iphone实现了dalu_hongkong接口,在这个接口中是实现了接口中的抽象方法*/
class dalu_iphone implements power_dalu{
private String plug_type = "两头插座";
private boolean flag=true;
public void dalu_insert() {
System.out.println("把大陆手机的"+getPlug_type()+"插入到大陆的插座中可用");
}
public String getPlug_type() {
return plug_type;
}
public void setPlug_type(String plug_type) {
this.plug_type = plug_type;
}
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
}
接下来是代码的核心部分,假如某个方法的参数只是接口1,其他的接口2也想实现这个方法,方法如下。用一个类A实现接口1,同时在类A中对接口2类进行申明,在类A中实现接口1的方法中调用接口2中的方法,就是做一个转换。
class dalu_adpter implements power_dalu{
hongkong_iphone hk =new hongkong_iphone();
public dalu_adpter(hongkong_iphone hk){
this.hk=hk;
}
public void dalu_insert() {
//在接口1中掉用接口2中的抽象方法
hk.setFlag(true);
hk.hongkong_insert();
}
}
public class adaper{
public static void main(String[] args) {
dalu_iphone d =new dalu_iphone();
hongkong_iphone hk =new hongkong_iphone();
connect_dalu(d);
dalu_adpter dalu_adpter =new dalu_adpter(hk);
connect_dalu(dalu_adpter);
}
//适配器模式的需求,假如当前方法的参数只能是接口1
public static void connect_dalu(power_dalu d){
d.dalu_insert();
}
}