`
awfrun
  • 浏览: 82489 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

9.适配器模式(Adapter)

阅读更多

1.你可能会经常遇到下面这种情况,厂家提供的接口和你写的接口合不上,怎么办??

这时候你不想改变自己的接口来适应厂家的接口,同时你又不能改变厂家的接口,那么这个时候你就应该考虑使用适配器模式了。

厂家调用他们的接口,而实际上我们给的却是看似像厂家的接口的接口。

 



 

 

2.适配器模式( Adapter Pattern)把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。又称为转换器模式、变压器模式、包装模式

 

  模式所涉及的角色有:
  目标(Target)角色:所期待得到的接口。
  源(Adaptee)角色:需要适配的接口。
  适配器(Adapter)角色:适配器把源接口转换成目标接口。根据这一角色的实现不同,可分为类的适配器模式(使用继承实现)和对象的适配器模式(使用委派关系实现)

 

 

3.例子: List -> Map

 

package com.adapter;

import java.util.ArrayList;
import java.util.List;



public class Facade {
	
	public List getEmpByOrgan(String orgId){
		List list = new ArrayList();
		list.add("张三");
		list.add("李四");
		list.add("王五");
		return list;
	}
	
	

}



package com.adapter;

import java.util.HashMap;
import java.util.List;

public class ListMapAdapter extends HashMap {
	private List list;
	public ListMapAdapter(List list){
		this.list = list;
	}

	@Override
	public Object get(Object i) {
		return list.get(Integer.valueOf(i.toString()).intValue());
	}

	
	@Override
	public int size() {
		return list.size();
	}
	


}



package com.adapter;

import java.util.HashMap;

public class Application {
	
	public static void execute(HashMap map){
		for(int i = 0; i< map.size(); i++){
			System.out.println(map.get(i+""));
		}
	}

}



package com.adapter;

public class Client {
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Facade facade = new Facade();
		
		ListMapAdapter listAdapter = new ListMapAdapter(facade.getEmpByOrgan(""));
		
		Application.execute(listAdapter);
		
	}

}

 

 

4.UML

 


 

 

5.类适配器与对象适配器

 

a.类的适配器模式把适配的类的API转换成目标类的API

 

  例子:

 

/**
 * 定义Client使用的与特定领域相关的接口
 */
public interface Target {
    void sampleOperation1();
    void sampleOperation2();
}
/**
 * 定义一个已经存在的接口,这个接口需要适配
 */
public class Adaptee {
    public void sampleOperation1() {
        // ......
    }
}
/**
 * 对Adaptee与Target接口进行适配
 */
public class Adapter extends Adaptee implements Target {
    public void sampleOperation2() {
        // ......
    }
}

 

b. 与类的适配器模式一样,对象适配器模式把适配的类的API转换成为目标类的API,与类的适配器模式不同的是,对象的适配器模式不是使用继承关系连接到Adaptee类,而是使用委派关系连接到Adaptee类。

 

例子:

 

/**
 * 定义Client使用的与特定领域相关的接口
 */
public interface Target {
    void sampleOperation1();
    void sampleOperation2();
}
/**
 * 定义一个已经存在的接口,这个接口需要适配
 */
public class Adaptee {
    public void sampleOperation1() {
        // ......
    }
}
/**
 * 对Adaptee与Target接口进行适配
 */
public class Adapter implements Target {
    private Adaptee adaptee;
    public Adapter(Adaptee adaptee) {
        super();
        this.adaptee = adaptee;
    }
    public void sampleOperation1() {
        adaptee.sampleOperation1();
    }
    public void sampleOperation2() {
        // ......
    }
}

 

 

使用组合可以让你最大限度的减少对adaptee的依赖。因此,建议在能使用对象适配器的时候不使用继承的方式。 

 

 

  • 大小: 44.6 KB
  • 大小: 4.4 KB
分享到:
评论

相关推荐

    【IT十八掌徐培成】Java基础第06天-06.适配器模式2.zip

    比如,`java.awt.event.Adapter`是事件处理器的一个抽象基类,我们可以创建它的子类,只覆盖我们需要处理的事件方法,而忽略其他事件,这就是对象适配器模式的一个实例。 6. **优缺点** - **优点**:适配器模式能...

    java 汽车适配器(Adapter适配器模式)

    在代码实现上,`Adapter.java`可能是适配器类的源代码,它实现了目标接口,并通过内部的适配者对象实现适配功能。`Java.jpg`可能是用来辅助说明适配器模式的图表或者类结构图。 适配器模式是软件设计中的重要工具,...

    PHP设计模式(五)适配器模式Adapter实例详解【结构型】

    适配器模式(Adapter Pattern)是一种结构型设计模式,它主要解决的是接口不兼容的问题,使得原本由于接口差异无法一起工作的类能够协同工作。在PHP中,适配器模式通过创建一个包装类(适配器类)来转换不兼容的接口...

    适配器模式adapter,含源码下载

    适配器模式(Adapter Pattern)是一种结构型设计模式,它能将两个不兼容的接口连接在一起,使得原本由于接口不匹配而无法一起工作的类能够协同工作。在IT行业中,适配器模式广泛应用在系统集成、组件重用以及解决...

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

    适配器模式是软件设计模式中的一种,它的主要目的是解决接口不兼容问题,使得原本由于接口差异无法协同工作的类能够协同工作。在实际的软件开发过程中,我们常常遇到这样的情况:旧有的系统或第三方库提供了丰富的...

    java中适配器模式案例

    在"Adapter.java"文件中,可能是适配器类的源代码实现,包含目标接口的实现以及对被适配类方法的调用和结果转换。通过阅读这个文件,可以更深入地理解适配器模式的运作机制。 适配器模式的主要优点包括: - 提高了...

    设计模式之适配器模式Java实现和类设计图

    例如,可能会有`Target.java`(目标接口),`Adaptee.java`(被适配者类),以及`Adapter.java`(类适配器或对象适配器类)。 UML类图是设计模式中非常重要的可视化工具,它清晰地展示了各个类之间的关系。在适配器...

    设计模式之 适配器 Adapter C++ 源码

    设计模式之 适配器 Adapter C++ 源码 vs2019 工具,设计模式之 适配器 Adapter C++ 源码 vs2019 工具,设计模式之 适配器 Adapter C++ 源码 vs2019 工具,设计模式之 适配器 Adapter C++ 源码 vs2019 工具,设计模式...

    设计模式C++学习之适配器模式(Adapter)

    适配器模式(Adapter)是软件工程中一种常用的设计模式,它允许两个不兼容的接口之间进行通信。在C++编程中,适配器模式能够帮助我们复用现有的类,或者将第三方库的接口与我们的系统接口进行对接,从而提高代码的可...

    设计模式——适配器模式(adapter)

    适配器模式(Adapter Pattern)是软件设计模式中的一种,其主要目的是解决系统中的接口不兼容问题,使得原本由于接口不匹配而无法一起工作的类能够协同工作。在本文中,我们将深入探讨适配器模式的概念、结构、作用...

    java设计模式之适配器模式

    适配器模式是一种在软件工程中广泛使用的结构型设计模式,它允许两个不兼容的接口之间进行通信。在Java中,适配器模式扮演着重要的角色,尤其在处理遗留代码或者第三方库集成时,能够有效地解决接口不匹配的问题。...

    适配器模式(Adapter)demo

    适配器模式是一种软件设计模式,它允许两个不兼容的接口之间进行通信。在软件开发中,我们常常遇到这样的情况:一个系统中的组件需要与另一个系统或库中的组件交互,但它们之间的接口不匹配,这时候就需要适配器模式...

    设计模式之适配器模式

    2. 适配器(Adapter)类:这是适配器模式的核心,它实现了目标接口,并持有对适配者对象的引用。适配器类负责将适配者的接口转换为目标接口。 3. 适配者(Adaptee)类:这是需要适配的原始接口或类,它的接口与目标...

    适配器(Adapter)模式

    适配器模式是一种软件设计模式,它允许两个不兼容的接口之间进行通信。在软件工程中,当系统中存在两种不兼容的接口或者类需要协同工作时,适配器模式可以发挥关键作用。通过适配器,我们可以复用现有的类,而无需...

    设计模式系列之适配器模式

    适配器模式是一种软件设计模式,它在不同的接口之间起到了桥梁的作用,使得原本由于接口不兼容而无法协作的类能够协同工作。这种模式的核心思想是将一个类的接口转换成客户希望的另一个接口,从而使原有类能适应新的...

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

    适配器模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,特别是在解决系统间的兼容性和接口不匹配问题时。适配器模式的核心思想是将一个类的接口转换成客户希望的另一个接口,使原本由于接口不兼容而无法...

    第9讲_适配器模式(Adapter)

    适配器模式是一种设计模式,它允许不兼容的类或接口之间进行通信和协作。这种模式的核心在于创建一个适配器类,该类将原始类(Adaptee)的接口转换为客户期望的目标接口(Target)。适配器模式分为基于类的适配器...

    c++-设计模式之适配器模式(Adapter Pattern)

    适配器模式(Adapter Pattern)是一种结构型设计模式,它允许将一个接口转换为客户端期望的另一个接口。适配器模式常用于解决由于接口不兼容而无法正常工作的类之间的协作问题。 适配器模式的组成 目标接口(Target...

    设计模式 - 适配器模式(C++实例)

    在`DesignMode_Adapter`这个压缩包文件中,可能包含了相关的C++源码示例,演示了如何创建和使用适配器模式。这些源码可能包括了目标接口、原始接口、适配器类的定义以及客户端如何通过适配器进行调用的示例。通过...

Global site tag (gtag.js) - Google Analytics