有三种适配器模式。
1.类适配器
2.对象适配器
3.接口适配器
类适配器
适配器继承适配对象,并实现适配目标的所有方法。
一个低级玩具的想变成高级玩具,适配器先继承那个低级玩具。
首先适配器要去继承需要适配对象(低级玩具,是个类)
然后适配器实现适配目标(高级玩具,是个接口)
最后直接new适配器对象,调用适配器的方法即可。
注意:因为Java是单继承,所以较少用此模式。
对象适配器
定义:基于聚合原则,将适配的对象作为适配器的一个属性。
和类适配器的区别就是:不继承适配对象(低级玩具,是个类)了,而是直接在适配器中new一个低级玩具直接获得此类的所有方法。
好处:解决单继承问题。
接口适配器
定义:适用于一个接口不想实现其所有的方法的情况,只想实现其中一个方法就行了。
举例:activity生命周期回调函数。
首先,适配器是抽象的。
其次,实现了所有接口的方法,但是方法体是空的。
然后,真正使用的时候就new一个适配器,然后所有的方法已经实现过了,只需要重写里面需要重写的方法即可。
适配目标(高级玩具)
public interface Listener{ public void start(); public void pause(); public void stop(); public void end(); }
适配器
public abstract class AbsListener implements Listener{ @Override public void start(){ } @Override public void pause(){ } @Override public void stop(){ } @Override public void end(){ } }
用一个类
public class Player{ public void listen(Listener listener){ listener.start(); listener.pause(); listener.stop(); listener.end(); } }
主程序
public class Client{ public static void main(String[] args){ new Player().listen(new AbsListener(){ @Override public void start(){ System.out.println("开始好方法"); } }); new Player().listen(new AbsListener(){ @Override public void end(){ System.out.println("结束好方法"); } }); } }