java设计模式之适配器模式

1介绍

1.1定义

适配器 相当于一个包装类 , A类无法直接操作B类 , 通过C类去操作B类 , 这个C类就相当于包装类进而就是我们所说的适配器了 。

1.2 作用

A,B 两种接口互相兼容,不匹配,只能通过一个适配器来将A接口转换为B所希望的接口类型。

适配器模式使得原本不兼容不能一起工作的接口可以一起工作。

1.3解决的问题

解决了两种不同类型的接口或者类无法直接互相调用,不能直接进行工作。

1.4 适配器用途

比如家用电器的转换电压,手机充电器接口,总不能直接插在USB那个口吧 , 根本接口型号不一致,不兼容。

2 模式与原理

2.1 类的适配器模式

2.1.2 UML图

\"在这里插入图片描述\"

2.1.3 代码实现

步骤一

//目标角色:所期待得到的角色,也就是接口类型
public interface Target {

    public void target1();

    public void target2();

}

步骤二

//源角色  需要适配的接口
public class Adaptee {

    public void adapteeTest(){
        System.out.println(\"源角色  需要适配的接口   类适配器....\");
    }

}

步骤三

适配器扩展target2个方法,自己本身通过集成Adaptee 拥有 接口方法。

//适配器  用来连接 目标角色 与 源角色

//适配器
public class Adepte extends Adaptee implements Target {


    @Override
    public void target1() {
        adapteeTest();
    }

    @Override
    public void target2() {
        adapteeTest();
    }





    //test
    public static void main(String[] args) {

        //target 通过适配器 调用 adeptee 接口
        Target target = new Adepte();
        target.target1();
        target.target2();
    }
}

2.2 对象的适配器模式

2.2.2 UML图

\"在这里插入图片描述\"

2.2.3 代码实现

步骤一

//目标角色:所期待得到的角色,也就是接口类型
public interface Target {

    public void target1();

    public void target2();

}

步骤二

//源角色  需要适配的接口
public class Adaptee {

    public void adapteeTest(){
        System.out.println(\"源角色  需要适配的接口   对象适配器\");
    }
}

步骤三

Adepte类里包装了一个Adeptee 实例 , 从而Adeptee 将 target 类连接起来 , Adepte 与 Adeptee 是委派关系, 决定了适配器模式是对象的。

//适配器  用来连接 目标角色 与 源角色
//适配器
public class Adepte  implements  Target {

    //源接口
    private Adaptee adaptee;
    //构造方法
    public Adepte(Adaptee adaptee) {
        this.adaptee = adaptee;
    }

    @Override
    public void target1() {
        adaptee.adapteeTest();
    }

    @Override
    public void target2() {
        adaptee.adapteeTest();
    }

    //test
    public static void main(String[] args) {
        //target 通过适配器 调用 adeptee 接口
        Target target = new Adepte(new Adaptee());
        target.target1();
        target.target2();
    }
}

2.3 所用到的角色

Target : 接口是我们需要的接口(期待得到的接口)

Adaptee : 是需要我们去适配的接口

Adepte : 适配器把源接口转换成目标接口

2.4 类适配和对象适配器区别

1 类适配器使用对象继承的方式,是静态的定义方式;对象适配器使用对象组合的方式,是动态的方式。

2 类适配器采用对象继承的方式,使得适配器器不能和源对象子类一起工作,不能再去处理源对象子类了,

对象适配器,可以将多个不同的源对象适配到同一个适配器中。

3 类适配器可以重写源对象的方法,源于继承的关系,而对象适配器不能,需要间接的定义它的子类再来实现。

4 类适配器,不需要引入一个对象,只需要继承方式。

 对象适配器需要引入一个或者多个源对象。

​ 对象适配器:没有采用集成方式。

收藏 打印