适配器对android工程师来说一定不陌生,但是也许仅局限于对适配器的应用,并不知道适配器是一种程序设计模式。
定义:
适配器模式:当你想要一把消音手枪的时候,你却只有一把王八盒子,这个时候你需要的是一把消音器,把枪口发出的巨大的噪声转化成小到敌人不能听到的声音,那么这个消音器就是适配器了。
适配器的分类:
适配器根据实现的方式不同分为类适配、对象适配器、接口适配器。
一、类适配器:
/**
* Created by wangsheng on 2018/3/12.
*/
public class GunNoise {
private static final String TAG = "GunNoise";
void soundSrcNoise(){
Log.d(TAG, "soundSrcNoise: ");
}
}
/**
* Created by wangsheng on 2018/3/12.
*/
public interface GunQuiet {
void SoundQuiet();
}
/**
* Created by wangsheng on 2018/3/12.
*/
public class Gunadapter extends GunNoise implements GunQuiet {
private static final String TAG = "Gunadapter";
@Override
public void SoundQuiet() {
soundSrcNoise();//拿到目标功能进行转化,这里只是个简单的模拟
Log.d(TAG, "经过转化枪声已经SoundQuiet: ");
}
}
client:
Gunadapter gunadapter=new Gunadapter();
gunadapter.SoundQuiet();
输出:
二、对象适配器
public interface GunQuiet {
void SoundQuiet();
}
public class GunNoise {
private static final String TAG = "GunNoise";
void soundSrcNoise(){
Log.d(TAG, "soundSrcNoise: ");
}
}
public class Gunadapter implements GunQuiet {
private static final String TAG = "Gunadapter";
GunNoise gunNoise;
public Gunadapter(GunNoise gunNoise) {
this.gunNoise = gunNoise;
}
@Override
public void SoundQuiet() {
gunNoise.soundSrcNoise();//拿到目标功能进行转化,这里只是个简单的模拟
Log.d(TAG, "经过转化枪声已经SoundQuiet: ");
}
}
client:
//适配器模式
Gunadapter gunadapter=new Gunadapter(new GunNoise());
gunadapter.SoundQuiet();
输出:
三、接口适配器
ValueAnimator objectAnimator= ObjectAnimator.ofFloat(400,0);
objectAnimator.setDuration(2000);
objectAnimator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
如上,有时候我们并不需要接口中的那么多方法的实现,全部实现则会显得代码显得臃肿,这个时候就需要一个接口适配器
去实现接口的全部方法,只不过全部都是空实现。
public abstract class AnimatorListenerAdapter implements Animator.AnimatorListener {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
}
ValueAnimator objectAnimator= ObjectAnimator.ofFloat(400,0);
objectAnimator.setDuration(2000);
objectAnimator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationStart(Animator animation) {
super.onAnimationStart(animation);
}
});
这个样就可以根据需要去实现需要的方法。