6.设计模式-适配器模式

适配器模式,顾明思议就是适配。就像我们的手机充电接口不合适的时候,在前面搞个转接口,转接口再插到电源上就可以充电了。又比如我们的内存卡,电脑是没办法直接读取的,这个时候我们需要用到一个读卡器的东西,那么把内存卡插到读卡器上,读卡器插到电脑上就可以了。这个转接头,读卡器就是我们说的适配。

在程序里面适配呢主要是分为3种适配,类适配,对象适配,接口适配

类适配

假如我们这里要通过target的接口调用source的方法,那么直接利用target实现类是不行的,除非在实现类维护source的对象。那么这种情况下,最好就是用适配器来做。

/**
 * 目标接口
 */
public interface Target {
    public void outputTarget();
}
/**
 *目标实现类
 */
public class TargetImpl implements Target {
    @Override
    public void outputTarget() {
        System.out.println("输出target");
    }
}
public class Source {
    public void outputSource(){
        System.out.println("我输出的是source");
    }
}

在适配器里面,通过继承Source类,实现Target接口,这个时候在通过target调用source方法,从而达到目的。

public class PowerAdapter extends Source implements Target {
    @Override
    public void outputTarget() {
        super.outputSource();
    }
}

测试一下,结果为调用到source方法。

public class MainTest {
    public static void main(String[] args) {
        PowerAdapter powerAdapter = new PowerAdapter();
        powerAdapter.outputTarget();
    }
}
我输出的是source

对象适配

正如类适配里面提到的,如果不采用继承的方式,那么就必须在维护一个对象。将上面的代码改造一下。

public class PowerAdapter implements Target {
    private Source source;
    public PowerAdapter(Source source){
        this.source=source;
    }
    @Override
    public void outputTarget() {
        source.outputSource();
    }
}

测试

public class MainTest {
    public static void main(String[] args) {
        Source source=new Source();
        PowerAdapter powerAdapter = new PowerAdapter(source);
        powerAdapter.outputTarget();
    }
}
我输出的是source

对象适配这里实际上,我们还可以把Source定义为接口,这样我们采用多态的形式就会更加的灵活。根据传递的对象,调用其具体的方法

接口适配

接口适配比较简单,假如我有一个接口,里面有10个方法,那么有一个业务类要实现这个接口,但是我只需要里面的一个方法的功能。根据接口规则,必须把10个方法都实现一遍。这样就非常的不友好。那么我们一般在中间加一个抽象类,先去实现这个接口,然后再用业务类继承抽象类,覆写里面的某一个方法即可。

接口

public interface Target {
    public void menthod1();
    public void menthod2();
    public void menthod3();
}

抽象类

public abstract class AbstractAdapter implements Target{
    @Override
    public void menthod1() {

    }

    @Override
    public void menthod2() {

    }

    @Override
    public void menthod3() {

    }
}

目标类

public class Source extends AbstractAdapter {
    @Override
    public void menthod1() {
        super.menthod1();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值