`

适配器模式

阅读更多

适配器模式:将一个类的接口,转换为客户期望的另一个接口。让原本接口不兼容的类可以合作无间。

可以通过创建适配器进行接口转换,让不兼容的接口变成兼容的。

调用适配器方法,适配器使用被适配者,把调用转换成被适配者的一个或多个调用接口。

适配器组合被适配者,实现目标接口。

 

老气象站的天气预报接口:getWendu();

新气象站的天气预报接口:getTemperature();

 

TencentQQ之前一直使用老的气象站,获取气温。

由于老的气象站设备落后数据不精确,想调用新气象局的天气预报接口。

但是新气象站的接口和老气象站的接口不兼容,必须改代码。

 

TencentQQ调用老气象站接口的代码已经在线上运行了很久,证明代码很稳定,可靠,不想修改代码。

能不能不修改代码的前提下,就能实现新气象局的接口调用呢?

 

用适配器模式可以实现。

 

只要新气象局能做一个适配器,实现目标接口(老气象站接口),并且组合被适配者(新气象站)

调用适配器的方法,适配器会使用被适配者,把调用转换成被适配者的一个或多个调用接口。

 

package com.ez.biz;

import com.ez.NewWeatherService;
import com.ez.OldWeatherService;
import com.ez.impl.NewWeatherServiceAdapter;
import com.ez.impl.NewWeatherServiceImpl;
import com.ez.impl.OldWeatherServiceImpl;
/**
 * TencentQQ不需要改一行代码,就可以实现新气象站的气温获取。
 * 新气象站就是被适配者(实现目标接口),用老气象站接口就是目标接口。
 * @author 窗外赏雪(EZ编程网)
 */
public class Test {
	public static void main(String[] args) {
		TencentQQ qq=new TencentQQ();
		OldWeatherService ows=new OldWeatherServiceImpl();
		qq.setWeatherService(ows);
		qq.showTemperature();
		System.out.println("==============================");
		NewWeatherService newWeatherService=new NewWeatherServiceImpl();
		//新气象站适配器用来适配新气象站
		ows=new NewWeatherServiceAdapter(newWeatherService);
		qq.setWeatherService(ows);
		qq.showTemperature();
	}
}

 

package com.ez.biz;

import com.ez.OldWeatherService;
/**
 * 客户方代码,就算出了新的气象台,也无需要改任何代码。
 * 只要把新气象台适配器注入进来,不改代码就可以通过新气象台适配器获取气温。
 * @author 窗外赏雪(EZ编程网)
 */
public class TencentQQ {
	
	private OldWeatherService  weatherService;
	//可以注入老气象站接口或子类的对象,如:新气象站适配器,老气象站
	public void setWeatherService(OldWeatherService weatherService) {
		this.weatherService = weatherService;
	}

	public void showTemperature(){
		weatherService.getWendu();
		System.out.println("TencentQQ show Temperature");
	}
}

 

package com.ez;
/**
 * 老气象站服务接口
 * @author 窗外赏雪(EZ编程网)
 */
public interface OldWeatherService {
	/**
	 * 获取气温
	 */
	void getWendu();
}

 

package com.ez;
/**
 * 新气象站服务接口
 * 想要客户不改代码就可以调用新气象站服务,必须适配新气象站服务。
 * @author 窗外赏雪(EZ编程网)
 */
public interface NewWeatherService {
	void getTemperature();
}

 

package com.ez.impl;

import com.ez.OldWeatherService;
/**
 * @author 窗外赏雪(EZ编程网)
 */
public class OldWeatherServiceImpl implements OldWeatherService{

	@Override
	public void getWendu() {
		System.out.println("通过老气象站,获取气温");
	}

}

 

package com.ez.impl;

import com.ez.NewWeatherService;
/**
 * @author 窗外赏雪(EZ编程网)
 */
public class NewWeatherServiceImpl implements NewWeatherService{

	@Override
	public void getTemperature() {
		System.out.println("通过新气象站,获取气温");
	}

}

 

package com.ez.impl;

import com.ez.NewWeatherService;
import com.ez.OldWeatherService;
/**
 * 新气象站适配器,需要实现想转换的类型接口(目标接口:老气象站接口),就是客户所期望看到的接口。
 * 适配器实现了目标接口,并持有被适配者的实例(新气象站)
 * 1、客户通过目标接口调用适配器的方法。
 * 2、适配器使用被适配者接口,把请求转换成被适配者的一个或多个调用接口。
 * 3、客户接收到调用的结果,但并未察觉这一切是适配器在起转换作用。
 * @author 窗外赏雪(EZ编程网)
 */
public class NewWeatherServiceAdapter implements OldWeatherService {
	//适配的对象
	private NewWeatherService newWeatherService;

	public NewWeatherServiceAdapter(NewWeatherService newWeatherService) {
		this.newWeatherService = newWeatherService;
	}

	//新气象站需要适配的接口
	@Override
	public void getWendu() {
		newWeatherService.getTemperature();
	}

}

 

分享到:
评论

相关推荐

    JAVA设计模式(抽象类与适配器模式)

    今天我们要探讨的是JAVA设计中的两个重要模式:抽象类与适配器模式。 首先,我们来理解一下“抽象”。抽象是面向对象编程的核心概念之一,它帮助我们处理对象的复杂性。在Java中,抽象通常通过抽象类来实现。抽象类...

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

    在这个Java实现中,我们将深入探讨适配器模式的两大类型:类适配器模式和对象适配器模式,并通过具体的代码示例和UML类图来阐述其工作原理。 首先,我们来理解适配器模式的基本概念。适配器模式就像现实生活中的...

    设计模式之适配器模式

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

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

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

    java 动态代理模式 适配器模式

    Java动态代理模式与适配器模式是两种在软件设计中常用的设计模式,它们都有各自的优点和应用场景。在Java中,动态代理模式主要依赖于Java的反射API和InvocationHandler接口,而适配器模式则用于解决不同接口之间的...

    java设计模式之适配器模式

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

    java中适配器模式案例

    适配器模式是一种设计模式,它允许不兼容的类或接口之间进行通信,通过创建一个适配器类作为中间桥梁,使得原本不匹配的接口能够协同工作。在Java中,适配器模式广泛应用于系统集成、旧代码复用以及第三方库的兼容性...

    适配器模式案例代码

    适配器模式是一种软件设计模式,它允许两个不兼容的接口之间进行通信。在这个案例中,我们关注的是如何通过适配器模式解决实际编程问题。文章《适配器模式案例代码》提供了具体的实现示例,链接指向了CSDN博主...

    设计模式-适配器模式(讲解及其实现代码)

    适配器模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,特别是在处理系统集成、遗留代码重用以及不同接口之间兼容性问题时。适配器模式的主要目的是将两个不兼容的接口融合在一起,使得原本无法直接协作...

    适配器模式demo源码

    适配器模式是一种常用的设计模式,它在软件开发中起到了桥梁的作用,允许两个不兼容的接口之间进行通信。在这个“适配器模式demo源码”中,我们可以深入理解这一模式的实现方式及其应用场景。 适配器模式的核心思想...

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

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

    设计模式的适配器模式的例子

    适配器模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,允许不同接口的类之间进行通信。适配器模式的核心思想是将一个类的接口转换成客户期望的另一个接口,使得原本由于接口不兼容而无法一起工作的类...

    实验七:适配器模式.rar

    适配器模式是一种软件设计模式,它允许两个不兼容的接口之间进行通信。在本实验中,我们将深入探讨适配器模式的概念、应用场景以及如何在实际编程中实现它。适配器模式通常分为类适配器和对象适配器两种形式。 ...

    适配器模式源代码

    适配器模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,允许不兼容的接口之间进行通信。在这个源代码实例中,我们看到的是如何通过适配器模式来实现不同对象之间的协作,使得原本无法直接交互的系统组件...

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

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

Global site tag (gtag.js) - Google Analytics