适配器模式

818 阅读2分钟

适配器模式应用场景

适配器模式将某个类的接口转换程你所期望的另一个接口的表示,主要目的是提高兼容性,让原本因为接口不匹配不能一起工作的两个类可以协同工作。简单来说A类的类型与B类所需的类型不同,通过适配器类转换成B类所需的类,适配器就是在A类下的类型转换作用。

类适配器

类适配器的实现概念:上海的垃圾分类,现在你手头上有个干垃圾,但是面前只有个湿辣鸡桶,我们现在创建个干垃圾的类内置扔辣鸡的方法。创建一个适配的接口,内置抽象类的扔垃圾方法,然后在创建适配实现类,实现接口,实现适配器的扔垃圾方法,在实现适配器的方法里,实现你想要的适配方法(转换垃圾类型)即可。心中有个概念,来看一下下面的“垃圾分类”。

/**
 * 需要适配的类
 *
 * 垃圾类(干垃圾)
 */
public class Rubbish {

    public String howRubbish() {
        return "干垃圾";
    }
}
/**
 * 适配接口
 */
public interface IRubbish {

    public String IRubbish();
}
/**
 * 适配实现 转换干垃圾类
 */
public class RubbishImpl extends Rubbish implements IRubbish{

    @Override
    public String IRubbish() {
        System.out.println("转成湿辣鸡");
        String rubbish = super.howRubbish();
        rubbish = "湿辣鸡";
        return rubbish;
    }
}
/**
 * 使用者 湿垃圾桶
 */
public class TrashCan {

    public void RubbishToIn(IRubbish rubbish) {
        String name = rubbish.IRubbish();

        if (name == "湿辣鸡"){
            System.out.println("湿辣鸡入桶成功");
        } else {
            System.out.println("罚款200");
        }
    }
}

对象适配器(推荐)

看以上代码,通过适配器将干垃圾(用不到的类型)转换成了湿垃圾(需要的类型),优点是其实可以单单继承需要适配的类通过重写方法也可实现适配器模式,代码简单易读。但是缺点也是比较明显,不管重写还是写一个适配器接口与实现,因为类只能继承一个类,就限制了扩展性。所以适配器还有另外一种实现方法,解决了该扩展性能差的问题。因为代码基本相同,需要更改的只有适配器实现类,下面贴出代码。

/**
 * 适配转换
 */
public class RubbishImpl implements IRubbish {

    private Rubbish rubbish;

    public RubbishImpl(Rubbish rubbish) {
        this.rubbish = rubbish;
    }

    @Override
    public String IRubbish() {
        System.out.println("转成湿辣鸡");
        String rubbishName = rubbish.howRubbish();
        String newRubbish = "湿辣鸡";
        return newRubbish;
    }
}

解决办法即是通过引用需要适配的类,通过构造器注入,这样就解决只能适配一个类的尴尬处境了。这样看来对象适配器更加灵活与方便。

public class RubbishTest {

    public static void main(String[] args) {
        TrashCan trashCan = new TrashCan();
        trashCan.RubbishToIn(new RubbishImpl());
    }
}
//测试结果
转成湿辣鸡
湿辣鸡入桶成功

源码地址:github.com/Liyinzuo/De…

以上便是适配器模式介绍,如果有错误或者不足的地方欢迎指正。