设计模式-适配器模式

适配器对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);
            }
        });
这个样就可以根据需要去实现需要的方法。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值