概述 该模式主要用于通过适配器让二者产生正确的联系,比如我们到其他国家去旅游,某国使用电压为110V,如果我们没有变压器直接充电的话,肯定是充不进去的,这里我们可以将变压器当作适配器,有了适配器我们才可以进行充电
实践
新建一个接口,该接口定义适配器的行为 package com.skindow.designPtterns.adapterMode; /** * Created by skindow on 2019/11/1. */ public interface Adapter { void charge(); } 新建特定的适配器,新建一个类实现以上接口,以下新建了110V和220V变压器 package com.skindow.designPtterns.adapterMode; /** * Created by skindow on 2019/11/1. */ public class Adapter_110 implements Adapter{ private Phone phone; public Adapter_110(Phone phone) { this.phone = phone; } public void charge() { System.out.print("适配前为" + phone.getV() + "V电压"); phone.setV(110); } } 新建手机抽象类 package com.skindow.designPtterns.adapterMode; /** * Created by skindow on 2019/11/1. */ public abstract class Phone { private Integer i; public Phone(Integer i) { this.i = i; } public Integer getV() { return i; } public void setV(Integer i) { this.i = i; } private Adapter adapter; public void setAdapter(Adapter adapter) { this.adapter = adapter; } public Adapter getAdapeter() { return adapter; } public void Charging(){} } 新建一个苹果手机,新建一个类继承手机类 package com.skindow.designPtterns.adapterMode; /** * Created by skindow on 2019/11/1. */ public class Apple extends Phone { public Apple(Integer i) { super(i); } public void Charging() { if (super.getV() != 220 && super.getAdapeter() == null) { System.out.println("手机电压不符合该手机合规电压,由于没有适配器该手机即将烧毁"); } if (super.getV() != 220 && super.getAdapeter() != null) { Adapter adapeter = super.getAdapeter(); adapeter.charge(); System.out.println("经过适配之后的电压为" + super.getV()); if (super.getV() != 220) { System.out.println("该手机已经被烧毁"); } else { System.out.println("该手机正常充电中。。。。"); } } } } 实验 package com.skindow.designPtterns.adapterMode; /** * Created by skindow on 2019/11/1. */ public class main { public static void main(String[] args) { Integer i = 500; System.out.println("---------------未使用适配器---------------"); Apple apple = new Apple(i); apple.Charging(); System.out.println("---------------使用错误的适配器---------------"); Apple apple2 = new Apple(i); Adapter adapter = new Adapter_110(apple2); apple2.setAdapter(adapter); apple2.Charging(); System.out.println("---------------使用错正确的适配器---------------"); Apple apple1 = new Apple(i); Adapter adapter1 = new Adapter_220(apple1); apple1.setAdapter(adapter1); apple1.Charging(); } }以下为打印结果
"C:\Program Files (x86)\Java\jdk1.8.0_131\bin\java" "-javaagent:C:\D\IntelliJ IDEA 2017.1.4\lib\idea_rt.jar=55144:C:\D\IntelliJ IDEA 2017.1.4\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files (x86)\Java\jdk1.8.0_131\jre\lib\charsets.jar;C:\Program Files (x86)\Java\jdk1.8.0_131\jre\lib\deploy.jar;C:\Program Files (x86)\Java\jdk1.8.0_131\jre\lib\ext\access-bridge-32.jar;C:\Program Files (x86)\Java\jdk1.8.0_131\jre\lib\ext\cldrdata.jar;C:\Program Files (x86)\Java\jdk1.8.0_131\jre\lib\ext\dnsns.jar;C:\Program Files (x86)\Java\jdk1.8.0_131\jre\lib\ext\jaccess.jar;C:\Program Files (x86)\Java\jdk1.8.0_131\jre\lib\ext\jfxrt.jar;C:\Program Files (x86)\Java\jdk1.8.0_131\jre\lib\ext\localedata.jar;C:\Program Files (x86)\Java\jdk1.8.0_131\jre\lib\ext\nashorn.jar;C:\Program Files (x86)\Java\jdk1.8.0_131\jre\lib\ext\sunec.jar;C:\Program Files (x86)\Java\jdk1.8.0_131\jre\lib\ext\sunjce_provider.jar;C:\Program Files (x86)\Java\jdk1.8.0_131\jre\lib\ext\sunmscapi.jar;C:\Program Files (x86)\Java\jdk1.8.0_131\jre\lib\ext\sunpkcs11.jar;C:\Program Files (x86)\Java\jdk1.8.0_131\jre\lib\ext\zipfs.jar;C:\Program Files (x86)\Java\jdk1.8.0_131\jre\lib\javaws.jar;C:\Program Files (x86)\Java\jdk1.8.0_131\jre\lib\jce.jar;C:\Program Files (x86)\Java\jdk1.8.0_131\jre\lib\jfr.jar;C:\Program Files (x86)\Java\jdk1.8.0_131\jre\lib\jfxswt.jar;C:\Program Files (x86)\Java\jdk1.8.0_131\jre\lib\jsse.jar;C:\Program Files (x86)\Java\jdk1.8.0_131\jre\lib\management-agent.jar;C:\Program Files (x86)\Java\jdk1.8.0_131\jre\lib\plugin.jar;C:\Program Files (x86)\Java\jdk1.8.0_131\jre\lib\resources.jar;C:\Program Files (x86)\Java\jdk1.8.0_131\jre\lib\rt.jar;C:\D\myProject\myfirstSpringboot\skindow-parent\target\classes;C:\Users\skindow\.m2\repository\org\springframework\boot\spring-boot-starter\2.1.7.RELEASE\spring-boot-starter-2.1.7.RELEASE.jar;C:\Users\skindow\.m2\repository\org\springframework\boot\spring-boot\2.1.7.RELEASE\spring-boot-2.1.7.RELEASE.jar;C:\Users\skindow\.m2\repository\org\springframework\spring-context\5.1.9.RELEASE\spring-context-5.1.9.RELEASE.jar;C:\Users\skindow\.m2\repository\org\springframework\spring-aop\5.1.9.RELEASE\spring-aop-5.1.9.RELEASE.jar;C:\Users\skindow\.m2\repository\org\springframework\spring-beans\5.1.9.RELEASE\spring-beans-5.1.9.RELEASE.jar;C:\Users\skindow\.m2\repository\org\springframework\spring-expression\5.1.9.RELEASE\spring-expression-5.1.9.RELEASE.jar;C:\Users\skindow\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.1.7.RELEASE\spring-boot-autoconfigure-2.1.7.RELEASE.jar;C:\Users\skindow\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.1.7.RELEASE\spring-boot-starter-logging-2.1.7.RELEASE.jar;C:\Users\skindow\.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;C:\Users\skindow\.m2\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;C:\Users\skindow\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.11.2\log4j-to-slf4j-2.11.2.jar;C:\Users\skindow\.m2\repository\org\apache\logging\log4j\log4j-api\2.11.2\log4j-api-2.11.2.jar;C:\Users\skindow\.m2\repository\org\slf4j\jul-to-slf4j\1.7.26\jul-to-slf4j-1.7.26.jar;C:\Users\skindow\.m2\repository\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;C:\Users\skindow\.m2\repository\org\springframework\spring-core\5.1.9.RELEASE\spring-core-5.1.9.RELEASE.jar;C:\Users\skindow\.m2\repository\org\springframework\spring-jcl\5.1.9.RELEASE\spring-jcl-5.1.9.RELEASE.jar;C:\Users\skindow\.m2\repository\org\yaml\snakeyaml\1.23\snakeyaml-1.23.jar;C:\Users\skindow\.m2\repository\org\projectlombok\lombok\1.18.8\lombok-1.18.8.jar;C:\Users\skindow\.m2\repository\org\slf4j\slf4j-api\1.7.26\slf4j-api-1.7.26.jar" com.skindow.designPtterns.adapterMode.main ---------------未使用适配器--------------- 手机电压不符合该手机合规电压,由于没有适配器该手机即将烧毁 ---------------使用错误的适配器--------------- 适配前为500V电压经过适配之后的电压为110 该手机已经被烧毁 ---------------使用错正确的适配器--------------- 适配前为500V电压经过适配之后的电压为220 该手机正常充电中。。。。 Process finished with exit code 0总结
通过适配器模式我们可以将一些不符合条件的场景通过适配从而达到理想的效果