java设计模式-----15、适配器模式

  概念:

  Adapter模式也叫适配器模式,是构造型模式之一,通过Adapter模式可以改变已有类(或外部类)的接口形式。

  举个例子:我们使用电脑,家里的电源是220V的,而我们的电脑是18V的,这时如果我们直接把电源连接电脑,一定会导致电脑被烧坏,因为电源电压太高了,这时我们就需要一个电源适配器,连接在电源与电脑之间,通过适配器进行一个降压,来保证电脑的正常工作。

  

  增加适配器

  用代码实现:

  首先如果不使用适配器的话

  新建一个220V电源

1 //220V电源
2 public class PowerSupply {
3     public void powerSupply220V(){
4         System.out.println("使用220V电源");
5     }
6 }

  新建一个笔记本电脑,使用电源

1 //笔记本电脑使用220V电源
2 public class Computer {
3     public static void main(String[] args) {
4         PowerSupply powerSupply = new PowerSupply();
5         powerSupply.powerSupply220V();
6     }
7 }

  结果如下:

  这样笔记本电脑就直接使用了220V电压,但是这样的话,笔记本电脑会直接烧毁,无法使用,因为电压太高了,所以我们需要在中间接一个适配器,以达到降压的目的

  适配器继承220V电压

1 //适配器
2 public class Adapter extends PowerSupply{
3     public void powerSupply18V(){
4         System.out.println("使用适配器");
5         this.powerSupply220V();
6         System.out.println("电压降为18V");
7     }
8 }

  笔记本电脑通过适配器调用电源

//笔记本电脑通过适配器使用220V电源
public class Computer {
    public static void main(String[] args) {
        Adapter adapter = new Adapter();
        adapter.powerSupply18V();
    }
}

  结果如下:

  可以看到,通过这种形式,我们使用的还是之前的那个电源,但是通过适配器,电压就降到了18V,电脑就可以正常使用了。

  但是这只是适配器模式的其中一种形式。

  下面更详细的说明一下适配器模式

  适配器模式使用场景

  在大规模的系统开发过程中,我们常常碰到诸如以下这些情况:

  我们需要实现某些功能,这些功能已有还不太成熟的一个或多个外部组件,如果我们自己重新开发这些功能会花费大量时间;所以很多情况下会选择先暂时使用外部组件,以后再考虑随时替换。但这样一来,会带来一个问题,随着对外部组件库的替换,可能需要对引用该外部组件的源代码进行大面积

的修改,因此也极可能引入新的问题等等。如何最大限度的降低修改面呢?

  Adapter模式就是针对这种类似需求而提出来的。Adapter模式通过定义一个新的接口(对要实现的功能加以抽象),和一个实现该接口的Adapter(适配器)类来透明地调用外部组件。这样替换外部组件时,最多只要修改几个Adapter类就可以了,其他源代码都不会受到影响。

  简单来说:

  1、 系统需要使用现有的类,而这些类的接口不符合系统的需要。

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

  3、 需要一个统一的输出接口,而输入端的类型不可预知。

  下面说一下适配器模式的结构 

  1.通过继承实现Adapter

  这种形式,就是我们刚才举的例子

  Client:就是笔记本电脑(Computer)

  Target:就是笔记本电脑中调用的方法(adapter.powerSupply18V())

  Adaptee:就是220V电压(PowerSupply)

  Adapter:就是适配器(Adapter)

  2.通过委让实现Adapter

  

  第二种模式,只需修改适配器与电脑即可

  适配器不再继承电源,而是当成一个成员变量

 1 //适配器
 2 public class Adapter{
 3     private PowerSupply powerSupply;
 4
 5     public Adapter(PowerSupply powerSupply){
 6         this.powerSupply = powerSupply;
 7     }
 8
 9     public void powerSupply18V(){
10         System.out.println("使用适配器");
11         this.powerSupply.powerSupply220V();
12         System.out.println("电压降为18V");
13     }
14 }

  电脑

1 //笔记本电脑通过适配器使用220V电源
2 public class Computer {
3     public static void main(String[] args) {
4         Adapter2 adapter = new Adapter2(new PowerSupply());
5         adapter.powerSupply18V();
6     }
7 }

  一般,使用第二种委让形式更多一些,因为这种方式不必继承,使用成员变量更加的灵活

原文地址:https://www.cnblogs.com/xiaobai1226/p/8598890.html

时间: 2024-10-31 11:13:36

java设计模式-----15、适配器模式的相关文章

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

Adapter Pattern的作用是在不改变功能的前提下转换接口.Adapter分为两类,一类是Object Adapter, 另一类是Class Adapter.由于Class Adapter的实现需要用到多继承,而Java不支持多继承,所以这里只关注Object Adapter. 在JDK1.5之前是没有 java.util.Iterator 接口的,java.util.Enumeration 接口起着 Iterator 的作用.那么如果我们需要维护一些年代比较久远的代码,可能就会面临着没

Java设计模式----初识适配器模式

[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3930271.html 联系方式:[email protected] [正文] 我们知道,Android中最重要也是最难用的UI控件就是ListView列表控件,而要想灵活运用它,则必须要用到适配器adapter,所以,我觉得还是很有必要来学习一下Java当中的适配器模式(不管以后能不能用到),毕竟

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

转载:<JAVA与模式>之适配器模式 这个总结的挺好的,为了加深印象,我自己再尝试总结一下 1.定义: 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作.      (太官方了,不太好理解, 其实就是要用到两个不相关的类/接口,但是又没有源代码,或者不想修改源代码,而增加一个类来完成合并使用的目的) 2.实现这个目的有两个方法,继承或者组合 2.1.使用继承(就是所谓的类适配器模式) 2.2.使用组合(所谓的对象适配器模式)

Java设计模式应用——适配器模式

性能监控系统中,存在告警模块和报表模块,告警结果和报表结果都需要导出. 由于告警开发进度较快,已经实现了excel导出.csv导出.zip导出功能,现在报表需要excel导出.csv导出.pdf导出功能,该如何做呢? 显然,报表不会重复开发excel导出,csv导出代码,只需要增加pdf导出代码即可,这种情况下使用适配器模式再好不过. 一. 类适配器模式 直接的想法,继承告警导出类,增加pdf导出代码,这也就是类适配器模式. 1. 告警导出类 package com.coshaho.learn.

Java设计模式-Adapter(适配器模式)

适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作. 适配器模式的结构 适配器模式有类的适配器模式和对象的适配器模式两种不同的形式. 类适配器模式 类的适配器模式把适配的类的API转换成为目标类的API. 在上图中可以看出,Adaptee类并没有sampleOperation2()方法,而客户端则期待这个方法.为使客户端能够使用 Adaptee类,提供一个中间环节,即类Adapter,把Adaptee的API与Target类的AP

java设计模式之六适配器模式(Adapter)

适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题.主要分为三类:类的适配器模式.对象的适配器模式.接口的适配器模式.首先,我们来看看类的适配器模式,先看类图: 核心思想就是:有一个Source类,拥有一个方法,待适配,目标接口时Targetable,通过Adapter类,将Source的功能扩展到Targetable里,看代码: [java] view plaincopy public class Source { public void 

Java设计模式之四 ----- 适配器模式和桥接模式

前言 在上一篇中我们学习了创建型模式的建造者模式和原型模式.本篇则来学习下结构型模式的适配器模式和桥接模式. 适配器模式 简介 适配器模式是作为两个不兼容的接口之间的桥梁.这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能. 简单的来说就是通过某个接口将不兼容的两个类进行兼容,俗称转换器.生活比较典型的例子是电器的电压,美国的电压是110V左右, 而中国的电压普片是220V,如果我们想用美国或日本的电器,则需要一个转换器,将110V转换成220V.还有一个很典型例子就是曾经的万能充,基

java设计模式之-适配器模式

前言 适配器模式就是当需要的功能与要提供的功能之间接口不符合时,作为两者之间的适配,从而让两者可以无缝对接.例如现实生活中的电脑充电情况一样,如果有朋友出国旅游,在国外买了一台电脑,回到国内后突然想给电脑充电,发现外国的电压不是220V的,而是110V的(这里是假设的),怎么办呢?还好外国买的电脑配有充电转换器,可以将220V的电压转换成110V电压,好吧,电脑充电问题可以解决了.这其中的充电转换器就是适配器,它可以无缝连接220V电压,并将其转换为110V的电压.这就是适配器模式. 例子 一台

java设计模式之适配器模式以及在java中作用

适配器作用就是讲一个接口适配到另一个接口,在Java 的I/O类库中有很多这样的需求,如将字符串数据转变成字节数据保存到文件中,将字节数据转变成流数据等. 以InputStreamReader和OutputStreamWriter类为例. InputStreamReader和OutputStreamWriter类分别继承了Reader和writer接口,但是要创建他们的对象必须在构造函数中传入一个InputStream和OutputStream 的实例,InputStreamReader和Out