设计模式——适配器模式

xiaoxiao2021-02-28  4

个人理解:

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) { 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,可正常开机---------

转载请注明原文地址: https://www.6miu.com/read-1250223.html

最新回复(0)