###定义 适配器模式将一个类的接口转换成客户期望的另一个接口。
适配器模式类图
需要注意的是,类适配器一般需要编程语言支持多继承的模式(例如C++)在此不讨论。
###实例 适配器模式就跟生活中的适配器一样,比如iPhone7的耳机接口是lighting接口,但是很多的耳机都是3.5mm的耳机接口,要想使用3.5mm接口耳机在iPhone7上听歌,我们就需要一个耳机接口的适配器。
首先的我们定义iPhone7耳机接口和一个iPhone7官配耳机类
public interface LightingEarPhone{ public void listenByLighting();}public class EarPods implements LightingEarPhone{ public void listenByLighting(){ System.out.println("Listen Music By EarPods!"); }}复制代码
定义普通的耳机和一个普通耳机的类
public interface CommontEarPhone{ public void listenByCommont();}public class SonyEarPhone implements CommontEarPhone { public void listenByCommont(){ System.out.println("Listen Music By SonyEarPhone!"); }}复制代码
现在我们需要用iPhone7来听歌,使用iPhone官配的耳机
public class ListenMusicByIphone7{ public static void main(String[] args) { //iPhone7只能通过lighting接口的耳机听音乐 LightingEarPhone iphone7EarPhone=new EarPods(); iphone7EarPhone.listenByLighting(); }}复制代码
但是我们现在需要用Sony 的耳机听歌,这个时候适配器就起到作用了
public class LightingAdapter implements LightingEarPhone{ CommontEarPhone commontEarPhone=null; public LightingAdapter(CommontEarPhone commontEarPhone){ this.commontEarPhone=commontEarPhone; } public void listenByLighting(){ commontEarPhone.listenByCommont(); }}复制代码
下面我们用Sony的耳机来在iPhone7上听音乐
public class ListenMusicByIphone7{ public static void main(String[] args) { //iPhone7只能通过lighting接口的耳机听音乐 LightingEarPhone iphone7EarPhone=new EarPods(); iphone7EarPhone.listenByLighting(); //使用Sony的耳机在iPhone7上听音乐(使用适配器) SonyEarPhone sonyEarPhone=new SonyEarPhone(); LightingEarPhone iphone7EarPhone2=new LightingAdapter(sonyEarPhone); iphone7EarPhone2.listenByLighting(); }}复制代码