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

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

阅读更多

一.概念

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

 

二.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  
这例子举得太精辟啦,,谢谢,楼主, 期待继续更新

相关推荐

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

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

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

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

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

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

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

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

    设计模式之适配器模式

    最容易上手和学习的实例,设计模式之适配器模式,你值得下载学习

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

    该资源是学习完设计模式的适配器模式与外观模式根据书中内容所写的demo

    .Net设计模式_适配器模式

    这是一个适配器模式的简单Demo,希望对学习设计模式的人有帮助

    《c#设计模式》电子书+随书源码

    本书是第一部关于C#和.NET设计模式的权威指导著作,为基于C#语言和Microsoft ® .NET框架的开发人员学习设计模式和应用设计模式提供了一个完整全面的理论框架和大量的详细应用实例。 本书内容覆盖了所有23个经典的...

    尚硅谷设计模式源码笔记课件.zip

    1) 内容包括: 设计模式七大原则(单一职责、接口隔离、依赖倒转、里氏替换、开闭原则、迪米特法则、合成复用)、UML类图(类的依赖、泛化和实现、类的关联、聚合和组合) 23种设计模式包括:创建型模式:单例模式(8种...

    00-初探 Laravel 和其中的设计模式(3).html

    适配器模式( Adapter ) 装饰器模式( Decorator ) 代理模式( Proxy ) 外观模式( Facade ) 桥接模式( Bridge ) 组合模式( Composite ) 享元模式( Flyweight ) 行为型模式包含了: 策略模式( Strategy ...

    12-附录 1 设计模式的七大原则(1).html

    适配器模式( Adapter ) 装饰器模式( Decorator ) 代理模式( Proxy ) 外观模式( Facade ) 桥接模式( Bridge ) 组合模式( Composite ) 享元模式( Flyweight ) 行为型模式包含了: 策略模式( Strategy ...

    《C++20设计模式》学习笔记-第6章适配器模式学习代码

    《C++20设计模式》学习笔记-第6章适配器模式学习代码

    设计模式:可复用面向对象软件的基础--详细书签版

     “[设计模式]在实用环境下特别有用,因为它分类描述了一组设计良好,表达清楚的面向对象软件设计模式。整个设计模式领域还很新,本书的四位作者也许已占据了这个领域造诣最深的专家中的半数,因而他们定义模式的方法...

    设计模式_适配器模式.zip

    这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。 这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入...

    设计模式学习之适配器模式

    在我们平时的开发过程中,适配器模式可以说是经常能见到的设计模式,ListView 和RecyclerView的Adapter就是典型的适配器模式,当我们在开发时,碰到要在两个完全没有关系的类之间进行交互,第一个解决方案是修改各自...

    01-制造工具的工厂模式(1).html

    适配器模式( Adapter ) 装饰器模式( Decorator ) 代理模式( Proxy ) 外观模式( Facade ) 桥接模式( Bridge ) 组合模式( Composite ) 享元模式( Flyweight ) 行为型模式包含了: 策略模式( Strategy ...

    09-通过容器实现的外观模式(2).html

    适配器模式( Adapter ) 装饰器模式( Decorator ) 代理模式( Proxy ) 外观模式( Facade ) 桥接模式( Bridge ) 组合模式( Composite ) 享元模式( Flyweight ) 行为型模式包含了: 策略模式( Strategy ...

    05-容易被忽略的迭代器(1).html

    适配器模式( Adapter ) 装饰器模式( Decorator ) 代理模式( Proxy ) 外观模式( Facade ) 桥接模式( Bridge ) 组合模式( Composite ) 享元模式( Flyweight ) 行为型模式包含了: 策略模式( Strategy ...

    03-查询语句建造器(1).html

    适配器模式( Adapter ) 装饰器模式( Decorator ) 代理模式( Proxy ) 外观模式( Facade ) 桥接模式( Bridge ) 组合模式( Composite ) 享元模式( Flyweight ) 行为型模式包含了: 策略模式( Strategy ...

Global site tag (gtag.js) - Google Analytics