`
zy19982004
  • 浏览: 663746 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
F6f66edc-1c1a-3859-b76b-a22e740b7aa7
Hadoop学习
浏览量:252400
社区版块
存档分类
最新评论

设计模式学习九:适配器模式

阅读更多

一.概念

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

 

二.UML

 

三.更加生动的例子

 

 

 

四.实例分析

     去年买了一个本本,另外给本本配了罗技G1光电套。坑爹的是,光电套的鼠标是USB接口,键盘是PS2接口,可我的本本却没有PS2接口啊。于是跑到市场,淘了一个转接器。

      于是乎,我抽象了这么几个类。

  1. PS2Port(PS2接口)。
  2. USBPort(USB接口)。
  3. PS2ToUSB(对象适配器),将PS2接口装换成USB接口。
  4. TestAdapter(测试类),客户端。

     PS2Port

package com.zzy.adapter;

/**
 * PS2接口,圆口
 * @author eason
 *
 */
public interface PS2Port {
	public void workWithPS2();
}

 

     USBPort

package com.zzy.adapter;

/**
 * USB接口,U口
 * @author eason
 *
 */
public interface USBPort {
	public void workWithUSB();
}

 

     PS2ToUSB

package com.zzy.adapter;

/**
 * 对象适配器
 * 将PS2接口装换成USB接口
 * 所以此类类型是USB接口(implements USBPort) + 成员变量ps2Port
 * @author eason
 *
 */
public class PS2ToUSB implements USBPort{

	private PS2Port ps2Port;
	
	public PS2ToUSB(PS2Port ps2Port) {
		this.ps2Port = ps2Port;
	}
	
	@Override
	public void workWithUSB() {
		System.out.println("转换的关键在这里,本来是");
		ps2Port.workWithPS2();
		System.out.println("经过你的转换,现在是USB工作中");
	}
	
}

 

     TestAdapter

package com.zzy.adapter;

/**
 * 测试类
 * client
 * @author eason
 *
 */
public class TestAdapter {

	public static void main(String[] args) {
		//1.我现在有一个PS2接口
		PS2Port ps2Port = new PS2Port() {
			@Override
			public void workWithPS2() {
				System.out.println("PS2工作中");
			}
		};
		
		//2.但是我需要的是一个USB接口啊,对我(client)来说,我只认识USB接口
		//3.经过PS2ToUSB的转换,PS2接口变成了USB接口
		USBPort ps2ToUsbPort = new PS2ToUSB(ps2Port);
		
		ps2ToUsbPort.workWithUSB();
		
	}

}
 

五.对象的适配器和类的适配器

     上述的适配器就是对象适配器。再看看类适配器。

 

     PS2ToUSB,只是简单模拟一下。因为java不允许多继承,所以java中没有类模式的代码,只有思想。

package com.zzy.adapter;

/**
 * 类适配器
 * @author eason
 *
 */
public class PS2ToUSB implements USBPort, PS2Port{

	//重写workWithUSB,把工作交给workWithPS2
	@Override
	public void workWithUSB() {
		workWithPS2();
	}
	
}

      差别就是:对象适配器实现了客户端想要的接口(USB),在内部有一个被适配对象(PS2)的引用,通过组合实现适配功能。类适配器实现了客户端想要的接口(USB)和被适配对象接口(PS2),通过继承来实现适配功能。

 

六.使用场景及使用感受

  1. 希望复用一些现存的类,但是接口又与复用环境要求不一致。
  2. 其实适配器模式有点无奈之举,在前期设计的时候,我们就不应该考虑适配器模式,而应该考虑通过重构统一接口。

七.适配器模式与装饰者模式

     它们都可以用来包装对象,本质区别在于

  1. 适配器模式:将一个接口转换成另外一个接口。
  2. 装饰者模式:不改变接口,只加入职责。

 

4
0
分享到:
评论
4 楼 yueyastorm 2014-12-25  
楼主对适配的模式的解读正和我意,适配一般用于系统升级和改造,解决问题的统一模式。
3 楼 ruijin5566 2014-06-05  
类适配器里面的PS2ToUSB还要override接口PS2Port的workWithPS2方法
2 楼 xiongjinpeng 2012-11-08  
例子真生动,懂了。
1 楼 gaoyubus 2012-10-31  
这例子举得太精辟啦,,谢谢,楼主, 期待继续更新

相关推荐

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

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

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

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

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

    同时,“[浪曦原创]JAVA设计模式 第1讲 抽象类与适配器模式(jzkangta).exe”应该是一个视频教程,可以帮助你更直观地学习。PPT文件“抽象类与适配器模式.ppt”则可能是教学幻灯片,列出了关键点和示例。最后,“demo...

    设计模式实验报告-适配器模式.docx

    ### 设计模式实验报告——适配器模式 #### 一、引言 设计模式是一种在特定情境下解决软件设计问题的通用解决方案。它为解决常见问题提供了一种可复用的设计思路,帮助开发者构建出更加灵活、易于维护的系统。在...

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

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

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

    适配器模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,允许不兼容的接口之间进行通信。在这个Java实现中,我们将深入探讨适配器模式的两大类型:类适配器模式和对象适配器模式,并通过具体的代码示例和...

    设计模式——适配器模式

    通过阅读和分析这些代码,我们可以深入理解适配器模式在实际编程中的运用,学习如何在C语言环境中实现这种设计模式。 适配器模式的关键优势在于: - **灵活性**:适配器模式允许我们轻松地添加新的适配器,以适应...

    设计模式适配器模式PPT学习教案.pptx

    适配器模式是一种结构型设计模式,主要解决的是不同接口之间不兼容的问题,使得原本由于接口不匹配而无法协作的类能够协同工作。适配器模式分为类适配器和对象适配器两种形式。 在类适配器模式中,适配器类直接继承...

    Head First 设计模式 (七) 适配器模式(Adapter pattern) C++实现

    适配器模式(Adapter pattern)是软件设计模式中的一种,其主要目的是解决系统间接口不兼容的问题,使得原本无法直接协作的类或者组件能够协同工作。在“Head First 设计模式”这本书中,适配器模式被深入浅出地讲解...

    iOS 设计模式 适配器模式

    适配器模式是一种软件设计模式,它允许两个不兼容的接口之间进行通信。在iOS开发中,这种模式尤其有用,因为我们需要将不同的组件或库集成到一个统一的系统中,而这些组件或库可能有着各自独立的设计和接口。适配器...

    Java 经典设计模式讲解以及项目实战

    Java 经典设计模式讲解以及...12 适配器模式 设计模式综合运用 1 门面+模版方法+责任链+策略 2 门面+模版方法+责任链+策略+工厂方法 3 动态代理+Spring AOP 4 责任链模式进阶 Spring Framework设计模式 Spring 设计模式

    设计模式—适配器模式

    1. 类适配器模式: 在类适配器模式中,适配器类继承自被适配的类,并实现目标接口。这种方式适用于被适配的类不能修改,或者为了减少类的数量和避免大量继承的情况。例如,假设有一个老版本的数据库连接类,其接口...

    适配器模式源代码

    3. 接口适配器模式:当目标接口有多个方法,而被适配者只实现了其中一部分时,可以通过接口适配器提供默认实现,让被适配者只需关注自己需要实现的部分。 适配器模式的步骤通常包括: 1. 定义目标接口,这是客户端...

    适配器模式DEMO

    通过这个DEMO,开发者不仅可以学习适配器模式的基本概念,还能了解到如何在实际编码中应用这一模式,从而提升软件设计的灵活性和可维护性。在分析和理解DEMO的过程中,建议关注以下几个关键点: 1. 适配器类的结构...

    java后端开发+java23种设计模式学习demo

    结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、...

    C#设计模式(设计模式的思想:对通用的对象间的相互作用方式进行记录和编目)

    7. **适配器模式**:允许不兼容的接口之间进行通信,通过创建一个适配器对象来转换原接口,使得原本不能一起工作的类可以协同工作。 8. **代理模式**:为其他对象提供一种代理以控制对这个对象的访问,常用于远程...

    Java适配器设计模式源码

    1. 类适配器模式: 在类适配器模式中,适配器类继承自目标类,并且包含一个对适配者对象的引用。适配器重写目标类的方法,调用适配者的方法以实现目标接口的功能。这种方式的灵活性较低,因为Java不支持多重继承,...

    设计模式之适配器模式与外观模式demo

    在软件设计领域,设计模式是一种经过时间和实践验证的解决方案,用于解决常见的...这个"设计模式之适配器模式与外观模式demo"资源为学习和实践这两种模式提供了宝贵的实例,对于提升编程技能和设计思维具有积极意义。

    适配器模式代码demo

    适配器模式是一种软件设计模式,它允许两个不兼容的接口之间进行通信。在本文中,我们将深入探讨适配器模式的概念、结构以及如何通过代码示例(即"Adapter"文件)来实现这一模式。 适配器模式的核心思想是解决系统...

Global site tag (gtag.js) - Google Analytics