设计模式(4)——适配器模式Java实现

适配器模式

装饰者模式是把相同超类型的对象包装装饰起来,赋予新的功能,与原来具有相同的超类型。而适配器模式同样也是将某些对象包装起来,只不过不再是原来的超类型,而是变成了新的类型。

适配器模式将一个类的接口,转换成期望的另一个接口。这样原本不兼容的接口可以无间的合作。

类图

组合被适配者对象接口,可以适配任意其子类。


适配器模式类图

Java示例

定义Vehicle接口

public interface Vehicle {
    void drive();
}

Car实现Vehicle接口

public class Car implements Vehicle{
    @Override
    public void drive() {
        System.out.println("I am driving a car.");
    }
}

定义Bike类

public class Bike {
    public void ride() {
        System.out.println("I am ridding a bike.");
    }
}

适配器类Adapter包装Bike,适配成接口Vehicle。将自行车Bike伪装成Vehicle。

public class Adapter implements Vehicle{
    private Bike bike;

    public Adapter(Bike bike){
        this.bike = bike;
    }

    @Override
    public void drive() {
        bike.ride();
    }
}

测试用例,在所有使用Vehicle接口对象的地方,都可以用adapter对象包装的自行车替换

public class Test {
    public static void main(String[] args){
        //小汽车
        Vehicle v = new Car();
        v.drive();

        //自行车
        Bike b = new Bike();
        b.ride();

        //适配器包装自行车,模拟汽车。
        //在所有使用Vehicle接口对象的地方,都可以用adapter对象包装的自行车替换
        //本质上仍然执行的是自行车的ride()方法
        Vehicle adapter = new Adapter(b);
        //调用汽车的drive()方法
        adapter.drive();
    }
}

执行结果

I am driving a car.
I am ridding a bike.
I am ridding a bike.

总结

适配器模式常常会被与装饰者模式进行区分,两者本质区别就在于适配器模式包装对象后改变为其他的接口,装饰者模式包装后仍旧是原有的接口

你可能感兴趣的:(设计模式(4)——适配器模式Java实现)