适配器模式(Adapter Class/Object)

转载 2016年08月30日 09:01:56

适配器模式(Adapter Class/Object)

是指将一个接口转换成客户端希望的另外一个接口,该模式使得原本不兼容的类可以一起工作。

举个例子:macbook pro有一个HDMI接口,一条HDMI接口的数据线,现在要外接显示器,而显示器只有VGI接口,我们需要一个HDMI-VGI转换器,这个转换器其实起到的作用就是适配器,让两个不兼容的接口可以一起工作。

类图:

这里写图片描述

适配器有4种角色:

  • 1.目标抽象角色(Target):定义客户所期待的使用接口。(GVI接口)

  • 2.源角色(Adaptee):需要被适配的接口。(HDMI接口)

  • 3.适配器角色(Adapter):把源接口转换成符合要求的目标接口的设备。(HDMI-VGI转换器)

  • 4.客户端(client):例子中指的VGI接口显示器。

把HDMI接口转换成VGI接口,使得macbook pro可以外接显示器。

//HDMI接口,需要被适配的接口
public interface HDMIPort {
    void workByHDMI();
}
//VGI接口,客户端所期待的接口
public interface VGIPort {
    void workByVGI();
}
//将HDMI接口转换为VGI,这就是适配器
public class HDMIToVGI implements VGIPort{

    HDMIPort hdmiPort;

    public HDMIToVGI(HDMIPort hdmiPort) {
        this.hdmiPort = hdmiPort;
    }
    //将HDMI接口转换为VGI接口
    @Override
    public void workByVGI() {
        hdmiPort.workByHDMI();
    }
}
public static void main(String[] args) {
        //定义一个HDMI接口
        HDMIPort hdmiPort = new HDMIPort() {
            @Override
            public void workByHDMI() {
                //hdmi接口工作方式
            }
        };
        //将HDMI接口转换为VGI接口
        VGIPort vgiPort = new HDMIToVGI(hdmiPort);
        //经过转换HDMI接口变成了VGI接口
        vgiPort.workByVGI();
    }

总结

适配器模式优点:

  • 1.可以让任何两个没有关联的类一起运行。

  • 2.提高了类的复用。

  • 3.增加了类的透明度。

  • 4.灵活性好。

适配器模式缺点:过多地使用适配器,会让系统非常零乱,不易整体进行把握。

适用场景:

  • 1.系统需要使用现有的类,而此类的接口不符合系统的需要。

  • 2.想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。

  • 3.通过接口转换,将一个类插入另一个类系中。

Test

package com.qbz.test;

//MicroUSB接口,客户端所期待的接口
interface MicroUSB {
    void process();
}

// USBTypec接口,需要被适配的接口
interface USBTypec {
    void process();
}

class Phone implements MicroUSB {
    @Override
    public void process() {
        System.out.println("使用MicroUSB接口进行充电");
    }
}

class Car implements USBTypec {
    @Override
    public void process() {
        System.out.println("使用USBTypec接口进行充电");
    }
}

// 适配器,将USBTypec接口转换成MicroUSB
class USBTypecToMicroUSB implements MicroUSB {

    USBTypec usbTypec;

    public USBTypecToMicroUSB(USBTypec usbTypec) {
        this.usbTypec = usbTypec;
    }

    @Override
    public void process() {
        System.out.println("USBTypec接口转换成MicroUSB");
        // 将USBTypec接口转换成MicroUSB接口
        usbTypec.process();
    }
}

public class Main {

    public static void main(String[] args) {
        USBTypec usbTypec = new Car();
        USBTypecToMicroUSB tTom = new USBTypecToMicroUSB(usbTypec);
        tTom.process();
    }

}

输出:

USBTypec接口转换成MicroUSB
使用USBTypec接口进行充电

c++设计模式(五)Adapter class/object 适配器

在c++中什么是适配器呢?           先来看个例子:对于笔记本电脑,每台都有一个适配器,这个适配器干什么呢?就是给笔记本提供合适的电压,因为不同的国家民用电压标准不同,美国是110,中国是2...
  • chenxun2009
  • chenxun2009
  • 2015年09月12日 01:45
  • 1056

Java设计模式之适配器模式(Adapter Pattern)

Adapter Pattern的作用是在不改变功能的前提下转换接口。Adapter分为两类,一类是Object Adapter, 另一类是Class Adapter。由于Class Adapter的实...
  • tracker_w
  • tracker_w
  • 2014年06月17日 03:39
  • 2403

设计模式之适配器模式(Adapter Class/Object)

1.解析定义 : 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作;宗旨 : 保留现有类所提供的服务,向客户提供接口,以满足客...
  • LABLENET
  • LABLENET
  • 2015年11月26日 10:06
  • 386

一个示例让你明白适配器模式

本文讨论适配器模式。适配器模式是23中设计模式之一,它的主要作用是在新接口和老接口之间进行适配。它非常像我们出国旅行时带的电源转换器。为了举这个例子,我还特意去京东上搜了一下电源转换器,确实看到了很多...
  • brave2211
  • brave2211
  • 2014年01月26日 00:08
  • 42415

设计模式(结构型)之适配器模式(Adapter Pattern)

将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。即Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作...
  • yanbober
  • yanbober
  • 2015年04月29日 10:05
  • 3072

Java设计模式之适配器模式(Adapter)在Android中的应用

1.概念:将内容与控件相分离的一种设计(公式) ,达到内容灵活显示的目的。2.适配器模式主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。单独讲解接口的适配器模式a. 接口的适配器模式...
  • huang_xiao_yu
  • huang_xiao_yu
  • 2015年11月01日 00:33
  • 1099

最常用的设计模式---适配器模式(C++实现)

sdfsfd
  • lh844386434
  • lh844386434
  • 2014年01月06日 22:24
  • 2029

Java设计模式透析之 —— 适配器(Adapter)

今天一大早,你的leader就匆匆忙忙跑过来找到你:“快,快,紧急任务!最近ChinaJoy马上就要开始了,老板要求提供一种直观的方式,可以查看到我们新上线的游戏中每个服的在线人数。” 你看了看日期,...
  • sinyu890807
  • sinyu890807
  • 2013年07月25日 09:01
  • 39854

设计模式读书笔记:Adapter Class/Object(适配器)

意图: 将一个类的接口转换成客户希望的另外一个接口。Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。...
  • panshiqu
  • panshiqu
  • 2015年07月07日 17:35
  • 327

iOS学习笔记(6)——适配器(Adapter)模式

买过港版iPhone的人都知道,港版iPhone的充电器使用的是英标,与内地的国标标准不通用。因此,如果想在内地使用港版的充电器,就必须再买个转接头,使港版充电器的插头能够与国标插口“适配”。这个转接...
  • chy305chy
  • chy305chy
  • 2015年03月02日 14:31
  • 844
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:适配器模式(Adapter Class/Object)
举报原因:
原因补充:

(最多只允许输入30个字)