适配器模式

»大话设计模式读书笔记

为什么需要适配器模式

适配器模式是用来将接口转换成我们需要的接口类型。从而让原本不兼容的接口可以合作。

例如:原先有一个食堂接口,Canteen,现在我们程序中只对餐厅接口开放,即一切的代码都只针对餐厅接口,Restaurant,但是以前的食堂接口里的方法其实对我们是有用的,即我们不需要重新实现餐厅接口。那么我们就可以用适配器模式将食堂接口适配成餐厅接口

//食堂接口
public interface Canteen {
	public Dinner saleDinner();
	public void close();
}

//餐厅接口
public interface Restaurant {
	public Dinner orderDinner();

}

//食堂适配器,将食堂接口转换成'餐厅接口'
public class CanteenAdapter implements Restaurant{
    private Canteen canteen;
    public CanteenAcapter(Canteen canteen){
        this.canteen = canteen;
    }
    public Dinner orderDinner(){
        return canteen.saleDinner();
    }
}

以上就是适配器的简单实现过程。适配器使用组合的方式,组合被适配者,然后实现希望转换的接口,将方法委托给配饰者实现。即让食堂包装起来,让它不像自己而像餐厅。

对象适配器

对象适配器指的就是上面一种,基于接口的实现,和组合

类适配器

类失配器是基于多重继承实现的

public class Target{
    public request(){
        ...
    }
}

public class Adaptee{
    public void specificRequest(){
        ...
    }
}


public class Adapter extends Target , Adaptee{
    //重写父类的request方法
    public request(){
        //将该方法委托给Adaptee的方法
        return this.specoficRequest();
    }
}

值得注意的是适配器并不只是只能适配一种接口,其实可以根据自己的需要适配多个接口,因为是基于实现接口和组合的方式,所以很灵活。

适配器模式跟装饰者模式很像,某些时候他们都可以实现同一种功能,但这两模式的目的是不同的,适配器模式的目的是转换接口,而装饰者模式的目的是增强目标类的方法,即在目标原方法的基础上加入新的责任。