适配器模式属于结构型模式的一种,用电器作例子,笔记本电脑的插头通常都是三相的,即除了阳极、阴极外,还有一个地极。而有些地方的电源插座却只有俩极,没有地极。电源插座与笔记本电脑的电源插头不匹配使得笔记本电脑没法充电。这时候一个三相到俩相的转换器(适配器)就能解决此问题,而这正像是本模式所作的事情。适配器模式主要有俩种类型,类适配器模式和对象适配器模式,因为类适配器模式经过多重继承对一个接口与另外一个接口进行匹配,而JAVA并不支持多继承,也就是一个类只能有一个父类,因此咱们这里主要讲的是对象适配器。git
结构型模式是将系统中的多个类或对象组合在一块儿,相互协做来完成更复杂的任务或功能。就比如搭积木,许多简单积木能够搭建成更复杂、功能更强大的结构。它分为俩种形式:类结构型模式和对象结构性模式。类结构型模式由多个类组合,存在继承和实现关系;对象结构型模式由类和对象组合,存在关联关系(好比车和车胎的关系)。github
下面咱们再介绍下适配器模式:编程
1.定义:将一个类的接口转换成客户但愿的另一个接口。Adapter模式使得本来因为接口不兼容而不能一块儿工做的那些类能够一块儿工做。测试
2.模式结构图:
this
(1)Target(目标抽象类):定义了特定的工做接口。spa
(2)Adapter(适配器类):模式的核心类,做业转换器对Target和Adapter进行适配。code
(3)Adaptee(适配者类):定义了须要适配的接口。对象
(4)Client(客户类):针对目标抽象类编程,调用其定义的方法。blog
3.案例分析:继承
目标抽象类Rebot
package com.lwx.adapter; /** * Created with IntelliJ IDEA. * Description: * User: lwx * Date: 2019-04-13 * Time: 18:34 */ public interface Robot { void cry(); void move(); }
须要适配的类Dog
package com.lwx.adapter; /** * Created with IntelliJ IDEA. * Description: * User: lwx * Date: 2019-04-13 * Time: 18:36 */ public class Dog { public void shout() { System.out.println("狗能够汪汪叫..."); } public void run() { System.out.println("狗能够跑..."); } }
适配器类DogAdapter
package com.lwx.adapter; /** * Created with IntelliJ IDEA. * Description: * User: lwx * Date: 2019-04-13 * Time: 18:37 */ public class DogAdapter implements Robot { private Dog dog; public DogAdapter(Dog dog) { this.dog = dog; } public void cry() { System.out.print("机器人模仿:"); dog.shout(); } public void move() { System.out.print("机器人模仿:"); dog.run(); } }
最后是测试类,以及运行结果
package com.lwx.adapter; /** * Created with IntelliJ IDEA. * Description: * User: lwx * Date: 2019-04-13 * Time: 18:38 */ public class Client { public static void main(String[] args) { Robot dogAdapter = new DogAdapter(new Dog()); dogAdapter.cry(); dogAdapter.move(); } }
四、模式优缺点:
优势:将目标类和适配者类解耦,更换添加适配器方便简单增长了类的复用性。
缺点:类适配器一次只能适配一个适配者类,目标抽象类只能为接口,具备必定的局限性;对象适配器模式很难置换适配者类的方法。
五、模式应用:
适配器模式主要应用于但愿复用一些现存的类,可是接口又与复用环境要求不一致的状况;就是双方都不太容易修改时就能够考虑使用该模式。
最后附上demo的githup地址:https://github.com/yijinqincai/design_patterns