适配器模式

简介: 1.概述将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。模式中的角色  目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。  需要适配的类(Adaptee):需要适配的类或适配者类。  适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。  适配

1.概述


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

模式中的角色

  目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。

  需要适配的类(Adaptee):需要适配的类或适配者类。

  适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。  

适配器模式有2种,第一种是“面向类的适配器模式”,第二种是“面向对象的适配器模式”。


2.类的适配器

先说“面向类的适配器模式”。顾名思义,这类适配器模式就是主要用于,单一的为某个类而实现适配的这样一种模式,为什么说只为某个类去实现,一会提到,我们先展示这种类适配模式的代码实现。

package com.visionsky.DesignPattern; 


//目标接口的代码如下: 
interface Target { 
    void Request(); 
} 
 
 //源的代码如下:
 class Adaptee { 
    void SpecificRequst() { 
        System.out.println("Adaptee's SpecificRequst"); 
    } 
} 
 
//适配器的代码如下:
class Adapter extends Adaptee implements Target  
{ 
 
    @Override 
    public void Request() { 
         System.out.println("Adapter's Request"); 
          super.SpecificRequst(); 
    } 
 
} 
 
public class AdapterDemo { 
 
    /** 
     * @param args 
     */ 
    public static void main(String[] args) { 
        // TODO Auto-generated method stub 
        Target t=new Adapter(); 
        t.Request(); 
    } 
 
}

好了,代码看完然后要做一些说明了,之前遗留的一个问题,为什么称其为类适配模式呢?很显然的,Adapter类继承了Adaptee类,而在Java这种单继承的语言中也就意味着,他不可能再去继承其他的类了,这样也就是这个适配器只为Adaptee这一个类服务,所以称其为类适配模式。


3.对象的适配器

说完类的适配模式,我们要开始说第2种对象的适配器模式了。对象适配器模式是把“源”作为一个对象聚合到适配器类中。同样的话不多说,贴上代码:

//源的代码以及目标代码同上,再次不再赘述。
//仅贴出适配器代码:

class Adapter  implements Target  
{ 
 
    private Adaptee adaptee; 
    public Adapter() 
    { 
        this.adaptee=new Adaptee(); 
    } 
     
    @Override 
    public void Request() { 
         System.out.println("Adapter's Request"); 
         adaptee.SpecificRequst(); 
    } 
 
} 
 
public class AdapterDemo { 
 
    /** 
     * @param args 
     */ 
    public static void main(String[] args) { 
        // TODO Auto-generated method stub 
        Target t=new Adapter(); 
        t.Request(); 
    } 
 
}

对象的适配器模式,把“源”作为一个构造参数传入适配器,然后执行接口所要求的方法。这种适配模式可以为多个源进行适配,弥补了类适配模式的不足。


4.比较

1.类的适配模式用于单一源的适配,由于它的源的单一话,代码实现不用写选择逻辑,很清晰;而对象的适配模式则可用于多源的适配,弥补了类适配模式的不足,使得原本用类适配模式需要写很多适配器的情况不复存在,弱点是,由于源的数目可以较多,所以具体的实现条件选择分支比较多,不太清晰。

2.适配器模式主要用于几种情况:(1)系统需要使用现有的类,但现有的类不完全符合需要。(2)讲彼此没有太大关联的类引进来一起完成某项工作(指对象适配)。


本文出自 “点滴积累” 博客,请务必保留此出处http://tianxingzhe.blog.51cto.com/3390077/1658944

目录
相关文章
|
9天前
|
设计模式
适配器模式
​ 如有错误或有补充,以及任何改进的意见,请留下您的高见 概念 适配器模式是一种结构型设计模式,它可以将一个类的接口转换成客户端所期望的另一个接口,从而使得原本由于接口不兼容而不能一起工作的两个类能够协同工作。 适配器模式中的角色包括目标接口(Target)、需要适配的类(Adaptee)和适配器(Adapter)。目标接口是客户端所期望的接口,需要适配的类是需要被适配的类或适配者类,适配器则是将需要适配的类的接口转换成目标接口的实现类。         源(Adaptee):这个角色通常是一个已经存在的类或者接口,其方法或行为与客户端所期望的不完全一致。源角色定义了需要被适配的接口,这
14 0
|
4月前
|
设计模式 C++
结构型 适配器模式
结构型 适配器模式
16 0
|
4月前
|
设计模式
【适配器模式】—— 每天一点小知识
【适配器模式】—— 每天一点小知识
|
7月前
|
Java API
适配器模式的运用
适配器模式的运用
51 0
|
8月前
|
设计模式 数据库 C++
2023-6-15-第六式适配器模式
2023-6-15-第六式适配器模式
67 0
|
10月前
|
设计模式 前端开发
关于适配器模式我所知道的
关于适配器模式我所知道的
34 0
|
11月前
|
Java 程序员 API
结构型模式-适配器模式
结构型模式-适配器模式
70 0
|
设计模式
我学会了,适配器模式
适配器模式属于结构型模式,这个类型的设计模式总结出了 类、对象组合后的经典结构,将类、对象的结构和使用解耦了,花式的去借用对象。
78 0
我学会了,适配器模式
|
设计模式 Java Spring
适配器模式详解与应用
引用一个最经典的例子,我们自己家里的电压都是220V的,而早期的手机充电时所用的都是5V的电压。要想让手机在220V的家庭电压下充电,就需要一个电源适配器。在编程中,也经常会出现一个类程序无法直接去使用,而需要通过适当变换的行为抽象出来的设计模式就是适配器模式。
|
设计模式
适配器模式与桥接模式(3)
适配器模式与桥接模式(3)
83 0