【适配器模式】
又称为变压器模式,也叫作包装模式,但是包装模式也包括了装饰模式。
适配器模式是将一个类的接口编程客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
适配器模式中有三个角色:
1.Target目标角色(IPhone手机类)
该角色定义把其他类转换为何种接口,也就是我们期望的接口。
2.Adaptee源角色,受改造者(DoubleEarPhone一对耳机类)
你想把谁转换成目标角色,这个谁就是源角色,它是一个已经存在、运行良好的类,经过适配器角色Adapter的包装,会成为一个新的角色。
3.Adapter适配器角色(Adapter耳机分线器类)
适配器模式的核心角色,其它两个角色都是已经存在的角色,而适配器模式是需要新建立的,他的职责非常简单:把源目标角色(受改造者)转换成目标角色。
转换的方式有两种:继承 或 关联。
【一对耳机、耳机分线器、手机】
【类适配器(继承)】
package com.Higgin.Adapter; /** * 手机端口接口(只有一个耳机端口) */ interface IPhone{ public void onePort(); } /** * 一对耳机类 */ class DoubleEarPhone{ public void twoPort(){ System.out.println("两个耳机有两个接口,情侣一起听歌~~~"); } } /** * 耳机分线器(类适配器 继承) */ class Adapter extends DoubleEarPhone implements IPhone { @Override public void onePort() { //实现IPone的onePort()方法 super.twoPort(); //调用父类DoubleEarPhone的twoPort()方法 } } /** * 客户端 */ public class TestAdapter { public static void main(String[] args) { IPhone adapter =new Adapter(); adapter.onePort(); } }
【对象适配器(关联)】
package com.Higgin.Adapter; /** * 手机端口接口(只有一个耳机端口) */ interface IPhone{ public void onePort(); } /** * 一对耳机类 */ class DoubleEarPhone{ public void twoPort(){ System.out.println("两个耳机有两个接口,情侣一起听歌~~~"); } } /** * 耳机分线器(对象适配器,关联) */ class Adapter implements IPhone { DoubleEarPhone doubleEarPhone=new DoubleEarPhone(); @Override public void onePort() { //实现IPone的onePort()方法 doubleEarPhone.twoPort(); //DoubleEarPhone对象的twoPort()方法 } } /** * 客户端 */ public class TestAdapter { public static void main(String[] args) { IPhone adapter =new Adapter(); adapter.onePort(); } }
【运行结果】