您的位置:首页 > 其它

设计模式——适配器模式

2017-11-06 17:38 169 查看
个人理解:

1. 适配器模式属于结构设计模式,有类适配器、对象适配器,示例代码中AndroidPhone为类适配器、IPhone为对象适配器;

2. 示例代码中Power为电源类,有5V,10V,220V,iPhone手机只有10V电压才可开机使用,Android手机只有5V电压才可开机使用,高电压可适配至低电压,低电压无法适配为高电压;

3. 个人理解类适配、对象适配的区别:类适配需要适配的类自己实现适配接口,在类中实现适配方法;对象适配:新建个类专门处理适配,在需要适配的类中声明适配对象变量,通过该变量实现适配方法;对象适配比类适配多了个适配的类

4. 适配在Android中应用非常多,ListView RecycleView、GridView等的各种Adapter,希望自己能专门写篇该分析

示例代码:

Power为电源类:

public class Power {

private String power;

public Power(String power) {
this.power = power;
}

public String getPower() {
return power;
}

public void setPower(String power) {
4000

this.power = power;
}
}


手机抽象类:

public abstract class Phone {

abstract void start(Power power);

}


适配接口:

public interface Adapter {

Power powerSwitch(Power power);

}


AndroidPhone实现类:

public class AndroidPhone extends Phone implements Adapter {

@Override
public Power powerSwitch(Power power) {
if (power.getPower().equals("5V")){
return new Power("Android手机传入5V电压,无需适配");
} else if (power.getPower().equals("220V")){
return new Power("Android手机传入220V电压,适配为5V,可正常开机");
} else{
return new Power("Android手机传入电压非法,无法适配");
}
}

@Override
public void start(Power power) {
if (powerSwitch(power).equals("5V")){
Log.i("startWithAdapter", "----------Android手机接入10V电压,正常开机---------");
}else {
Log.i("startWithAdapter", "----------"+powerSwitch(power).getPower()+"---------");
}
}
}


Iphone手机实现类:

public class Iphone extends Phone {

Adapter adaper;

public Iphone() {
}

public Iphone(Adapter adaper) {
this.adaper = adaper;
}

public void setAdaper(Adapter adaper) {
this.adaper = adaper;
}

@Override
public void start(Power power) {
if (adaper.powerSwitch(power).equals("10V")){
Log.i("startWithAdapter", "----------iPhone手机接入10V电压,正常开机---------");
}else {
Log.i("startWithAdapter", "----------"+ adaper.powerSwitch(power).getPower()+"---------");
}
}
}


Iphone Adapter类实现:

public class IphoneAdapter implements Adapter {

@Override
public Power powerSwitch(Power power) {
if (power.getPower().equals("10V")){
return new Power("iPhone传入电压为10V,无需适配");
} else if (power.getPower().equals("220V")){
return new Power("iPhone传入电压为220V,适配为10V,可正常开机");
} else{
return new Power("iPhone传入电压非法,无法适配");
}
}
}


调用方法:

private void factoryAdapter(){
/**
* 对象适配:iPhone手机电源适配
*/
IphoneAdapter iphoneAdapter = new IphoneAdapter();
Iphone iphoneWithAdapter = new Iphone(iphoneAdapter);
iphoneWithAdapter.start(new Power("5V"));
iphoneWithAdapter.start(new Power("10V"));
iphoneWithAdapter.start(new Power("220V"));

/**
* 类适配:Android手机电源适配
*/
AndroidPhone androidPhoneWithAdapter = new AndroidPhone();
androidPhoneWithAdapter.start(new Power("10V"));
androidPhoneWithAdapter.start(new Power("5V"));
androidPhoneWithAdapter.start(new Power("220V"));
}


方法执行结果:

11-29 16:29:07.647 824-824/com.wdp.designtest I/startWithAdapter: ----------iPhone传入电压非法,无法适配---------

11-29 16:29:07.647 824-824/com.wdp.designtest I/startWithAdapter: ----------iPhone传入电压为10V,无需适配---------

11-29 16:29:07.647 824-824/com.wdp.designtest I/startWithAdapter: ----------iPhone传入电压为220V,适配为10V,可正常开机---------

11-29 16:29:07.648 824-824/com.wdp.designtest I/startWithAdapter: ----------Android手机传入电压非法,无法适配---------

11-29 16:29:07.648 824-824/com.wdp.designtest I/startWithAdapter: ----------Android手机传入5V电压,无需适配---------

11-29 16:29:07.648 824-824/com.wdp.designtest I/startWithAdapter: ----------Android手机传入220V电压,适配为5V,可正常开机---------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: