美文网首页
Java设计模式—适配器模式

Java设计模式—适配器模式

作者: 怡红快绿 | 来源:发表于2017-11-15 19:06 被阅读0次

一、定义

共有两类适配器模式

对象适配器模式
在这种适配器模式中,适配器容纳一个它包裹的类的实例。在这种情况下,适配器调用被包裹对象的方法。

类适配器模式
这种适配器模式下,适配器继承自已实现的类。


二、解释

将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。——Gang of Four

基本概念

客户:需要调用我们的代码的对象。
Adapter模式的宗旨:保留现有类所提供的服务,向客户提供接口,以满足客户的期望。

主要内容

(1)类适配器
当客户在接口中定义了他期望的行为时,我们就可以应用适配器模式,提供一个实现该接口的类,并且扩展已有的类,通过创建子类来实现适配。

(2)对象适配器
对象适配器”通过组合除了满足“用户期待接口”还降低了代码间的不良耦合。在工作中推荐使用“对象适配”。下面是对象适配器的UML图:

(3) 缺省适配器模式
缺省适配器模式是一种特殊的适配器模式,但这个适配器是由一个抽象类实现的,并且在抽象类中要实现目标接口中所规定的所有方法,但很多方法的实现都是“平庸”的实现,也就是说,这些方法都是空方法。而具体的子类都要继承此抽象类。


三、代码示例 (出自Java设计模式之《适配器模式》及应用场景

接口定义

USB.java

public interface USB {
   void isUsb();
}

PS2.java

public interface PS2 {
    void isPS2();
}

目标类

public class Usber implements USB {
    @Override
    public void isUsb() {
        System.out.println("USB接口");
    }
}

1、类适配器

通过继承实现适配功能

Adapter1.java

public class Adapter1 extends Usber implements PS2 {
    @Override
    public void isPS2() {
        isUsb();
    }
}

测试类 Test.java

public class Test {

    public static void main(String[] args) {
        PS2 ps2 = new Adapter1();
        System.out.print("PS2接口适配完成,输出:");
        ps2.isPS2();
    }
}

输出结果
PS2接口适配完成,输出:USB接口

2、对象适配器

通过组合实现适配功能

Adapter2.java

public class Adapter2 implements PS2{

    private USB usb;

    public Adapter2(USB usb) {
        this.usb = usb;
    }

    @Override
    public void isPS2() {
        usb.isUsb();
    }
}

测试类 Test.java

public class Test {

    public static void main(String[] args) {
        PS2 ps2_1 = new Adapter2(new Usber());
        System.out.print("PS2接口适配完成,输出:");
        ps2_1.isPS2();
    }
}

输出结果
PS2接口适配完成,输出:USB接口

3、缺省适配器

使用场景
1.接口中规定了所有要实现的方法
2.但一个要实现此接口的具体类,只用到了其中的几个方法,而其它的方法都是没有用的。

假设我们有一个接口Funcs,其中定义N多方法

public interface Funcs {
    void a();
    void b();
    void c();
    void d();
    void e();
    void f();
}

但实现类只需要实现部分方法(假设需要a()、f()方法)即可,此时我们可以定义一个中间类,实现接口Funcs

public abstract class Adapter3 implements Funcs {
    @Override
    public void a() {

    }

    @Override
    public void b() {

    }

    @Override
    public void c() {

    }

    @Override
    public void d() {

    }

    @Override
    public void e() {

    }

    @Override
    public void f() {

    }
}

实现类只需继承此Adapter3类,选择需要的方法实现即可。

public class MyClass extends Adapter3 {

    @Override
    public void a() {
        super.a();
        //具体实现
    }

    @Override
    public void f() {
        super.f();
        //具体实现
    }

}

测试类

public class Test {
    public static void main(String[] args) {
        Funcs funcs = new MyClass();
        funcs.a();
        funcs.f();
    }
}

相关文章

  • 浅析Java设计模式【1】——观察者

    前情内容 浅析Java设计模式【1】——观察者 浅析Java设计模式【2】——适配器 浅析Java设计模式【3】—...

  • 浅析Java设计模式【2】——适配器

    前情内容 浅析Java设计模式【1】——观察者 浅析Java设计模式【2】——适配器 浅析Java设计模式【3】—...

  • java建造者模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java单例模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java外观模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java适配器模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java观察者模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java代理模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java策略模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • 浅析Java设计模式【3】——代理

    1. 前情内容 浅析Java设计模式【1】——观察者 浅析Java设计模式【2】——适配器 浅析Java设计模式【...

网友评论

      本文标题:Java设计模式—适配器模式

      本文链接:https://www.haomeiwen.com/subject/aurhvxtx.html