设计模式——适配器模式

171 阅读2分钟

概念

适配器模式(Adapter Pattern) 是一种结构型设计模式, 它能使接口不兼容的对象能够相互合作。适配器模式将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。

举个栗子:漏斗大家肯定都见过,当我们的器皿口较小时,我们通过辅助工具-漏斗,为器皿填充液体,这里漏斗就起到适配的作用。

类适配器与对象适配器

适配器又分为类适配器与对象适配器

类适配器

使用继承的适配器

类图

image.png

/***类适配器***/

public class Banner {
    public void showP(){
        //...
    }

    public void showA(){
        //...
    }
}


public interface Print {

    //弱化
    void printWeak();

    //强化
    void printStrong();

}


//适配器
public class BannerPrint extends Banner implements Print{

    //弱化
    @Override
    public void printWeak() {
        super.showA();
    }

    //强化
    @Override
    public void printStrong() {
        super.showP();
    }
}

对象适配器

使用委托的适配器,合成聚合复用原则

类图

image.png

// 对象适配器:基于组合
public class Print {
    //弱化
    void printWeak();

    //强化
    void printStrong();
}

public class Banner {
    public void showP(){ //... }

    public void showA(){ //... }
}

public class BannerPrint extends Print {
    private Banner banner;

    public BannerPrint(Banner banner) {
        this.banner = banner;
    }
  
  
    //弱化
    @Override
    public void printWeak() {
        banner.showA();
    }

    //强化
    @Override
    public void printStrong() {
        banner.showP();
    }
}

两者区别

实现方式不同:类适配器使用继承关系来实现,对象适配器使用组合关系来实现

登场角色

target 对象

  使用继承时Print接口,使用委托时Print类,定义角色所需要的方法

adapatee 被适配

Banner 它是被访问和适配的现存组件库中的组件接口

adapater 适配

BannerPrint 它是一个转换器,通过继承或引用适配者的对象,把适配者接口转换成目标接口,让客户按目标接口的格式访问适配者