07-适配器模式

07-适配器模式

1.类适配器-基于继承

// 对外接口
public interface ITarget {
    void f1();
    void f2();
}

// 内部接口
public class Adaptee {

    public void fa() {
        System.out.println("fa");
    }

    public void fb() {
        System.out.println("fb");
    }
}

// 类适配器Adaptor将内部接口(Adaptee中接口)转换为了对外接口(ITarget)。
public class Adaptor extends Adaptee implements ITarget {

    @Override
    public void f1() {
        super.fa();
    }

    @Override
    public void f2() {
        super.fb();
    }
}

2.对象适配器-基于组合

// 对外接口
public interface ITarget {
    void f1();
    void f2();
}

// 内部接口
public class Adaptee {

    public void fa() {
        System.out.println("fa");
    }

    public void fb() {
        System.out.println("fb");
    }
}

public class Adaptor implements ITarget {

    private final Adaptee adaptee;

    public Adaptor(Adaptee adaptee) {
        this.adaptee = adaptee;
    }

    @Override
    public void f1() {
        adaptee.fa();
    }

    @Override
    public void f2() {
        adaptee.fb();
    }
}

3.适配器模式总结

  1. 类适配器和对象适配器的使用场景。
    1. 如果Adaptee接口并不多,使用类适配器和对象适配器都可以。
    2. 如果Adaptee接口较多,但是Adaptee和ITarget接口定义基本都是相同的,即只有一小部分接口需要通过适配器模式进行转换,大部分接口直接使用,则推荐使用类适配器,这样代码量较少。
    3. 如果Adaptee接口较多,但是Adaptee和ITarget接口定义不部分都是不相同的,推荐使用对象适配器,这样更加的灵活。
  2. 适配器模式使用的场景:封装有缺陷的接口设计、统一多个类的接口设计、替换依赖的外部系统、兼容老版本接口和适配不同格式的数据。

4.Wrapper设计模式

  1. 从代码结构上看,静态代理模式、装饰器模式和适配器模式的代码接口是非常相似的,这三种设计模式可以被统称为Wrapper设计模式。
  2. Wrapper设计模式的用途。代理模式为类增加不相关的功能;装饰器模式为类增加相关的功能;适配器模式处理接口不兼容的问题。
posted @ 2022-11-27 08:49  行稳致远方  阅读(23)  评论(0)    收藏  举报