`
iwebcode
  • 浏览: 2003903 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Java23种设计模式--Adapter(适配器)

 
阅读更多

实例场景:我们以前的电脑上键盘的usb接口有的是圆形的,现在假如这个接口坏了,用户想要更换一个,但市场上基本上是方形usb接口,很无赖,配不上号,这时,店主告诉用户不用担心,买一个转换器就行,转换器可以兼容圆形和方形接口,问题就解决了。这个场景用到了我们所说的:适配器模式

Adapter模式的定义:把一个类的接口变换成客户端所期待的另外一种接口,使得原本由于接口不兼容而不能再一起工作的那些类可以一起工作。

适配器模式分类:1.类的适配器模式(采用继承实现)2.对象适配器(采用对象组合方式实现,委派)

模式的构成:以问题中例子为模型

目标抽象角色(Target):定义客户所期待要使用的接口,我们把键盘当做客户端,客户端所需要使用的usb接口是圆形的,在这里就可以抽象出来一个圆形接口的设备(并不一定是键盘)。

源角色(Adaptee):需要被适配的接口,在这里指的是方形usb接口键盘。

适配器角色(Adapter):用来把源接口转换成符合要求的目标接口的设备,在这里指的是我们的那个“转换器”。

客户端(Client):这里指的就是那个键盘。

类适配器模式:

源代码:

package cn.com.pattern; 
 
//目标抽象角色,用户需要的是有圆形的usb接口 
public interface Target { 
    public void provideCircleUsb(); 
} 

package cn.com.pattern; 
//源角色,这里是指提供方形的usb接口 
public class Adaptee { 
    public void provideSquareUsb(){ 
        System.out.println("我提供方形的USB接口"); 
    } 
} 

package cn.com.pattern; 
//适配角色,这里指老板买给我们的那个转换器 
public class Adapter extends Adaptee implements Target{ 
    @Override 
    //转换器将方形的接口转换为圆形接口 
    public void provideCircleUsb() { 
        this.provideSquareUsb(); 
    } 
} 

package cn.com.pattern; 
 
//客户端,也就是问题中的键盘 
public class Client { 
    public static void main(String[] args) { 
        Target target=new Adapter(); 
        //键盘只能使用圆形的USB接口 
        target.provideCircleUsb(); 
    } 
} 

最后将会输出:

我提供方形的USB接口

达到了用户需要的效果,让只支持圆形USB接口的键盘使用方形USB接口

以上是类的适配器模式,对象的适配器模式的不同之处在于Adapter角色封装了Adaptee角色,而不像类的适配器模式所采取的继承方式。其原理基本上是相似的。

对象适配器模式:(优先使用)

public class Adapter implements Target{ 
       private Adaptee adptee; 
       public Adapter(Adaptee adptee){ 
          this.adptee=adptee; 
          } 
          
        @Override 
    //转换器将方形的接口转换为圆形接口 
    public void provideCircleUsb() { 
        adptee.provideSquareUsb(); 
    } 
} 

//客户端,也就是问题中的键盘 
public class UClient {
	 public static void main(String[] args) { 
		Adaptee adaptee=new Adaptee();
	        Target target=new Adapter(adaptee); 
	        //键盘只能使用圆形的USB接口 
	        target.provideCircleUsb(); 
	    } 
}

类的适配器模式和对象适配器模式的比较:

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

应用适配器模式的场景:

1.系统需要使用现有的类,而现有类不符合当前系统的要求。如问题的提出。

2.系统要建立一个可以重复使用的类,用来与彼此没有太大关联的类或者在将来要引用的类一起工作。在Junit中有使用适配器模式的情景。

缺省的适配器模式(Default Adapter):缺省的适配器模式为一个接口提供缺省的实现,子类可以从这个缺省的实现类进行扩展,而不必而原有的接口进行扩展。相信大家在学习Swing时“AWT中事件的处理”有所接触。他的好处在于客户端不需要去实现与他无关的方法,只做他最关心的事。

这种模式的核心归结如下:当你想实现一个接口但又不想实现所有接口方法,只想去实现一部分方法时,就用中默认的适配器模式,他的方法是在接口和具体实现类中添加一个抽象类,而用抽象类去空实现目标接口的所有方法。而具体的实现类只需要覆盖其需要完成的方法即可。

转自:http://blog.csdn.net/leoleocmm/article/details/7593886







分享到:
评论

相关推荐

    java设计模式之适配器模式

    java设计模式之适配器模式,希望对大家有所帮助。

    用Java实现23种设计模式

    用Java实现23种设计模式 1. 创建型模式 工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern)...

    23种设计模式的java源代码

    里面包含了23中设计模式源代码,其中包括工厂模式(Factory)、单例(Singleton)、观察者...这些代码对于初学者看起来稍微复杂一些,我还有一个简易版的代码,标题为(23种设计模式的java源代码----容易理解的源代码)

    设计模式中的适配器设计模式

    java中的适配器模式,Adapter设计模式(包装器)23种设计模式之一

    java版本二十三种设计模式.zip

    - 23种设计模式 - 工厂方法模式(Factory Method) - 抽象工厂模式(Abstract Factory) - 单例模式(Singleton) - 建造者模式(Builder) - 原型模式(Prototype) - 代理模式(Proxy) - 适配器模式(Adapter) - 装饰...

    23种设计模式的java源代码----容易理解的源代码

    里面包含了23中设计模式源代码,其中包括工厂模式(Factory)、单例(Singleton)、观察者模式(Observer)、适配器模式(Adapter)、Template模式、Decorate模式、proxy模式等 这些设计模式源代码更容易理解

    【动力节点】Java视频教程_Adapter设计模式

    教程名称: 【动力节点】Java视频教程_Adapter设计模式本套Java视频教程详细讲解了适配器设计模式的用法。首先在Java视频中介绍了适配器模式的基本元素及其定义,然后先使用无适配器模式编程,再使用多功能适配器及...

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

    主要介绍了java设计模式之适配器模式Adapter的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    适配器模式(Adapter Pattern)原理图

    适配器模式是一种结构型设计模式,它允许接口不兼容的两个类可以协同工作。以下是该模式的要点: 1. **角色**: - **Target(目标接口)**:客户端期望调用的接口。 - **Adaptee(适配者)**:现有的、接口与目标...

    Java设计模式之Adapter适配器模式

    主要为大家详细介绍了Java设计模式之Adapter适配器模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    Java设计模式之适配器模式(Adapter模式)介绍

    主要介绍了Java设计模式之适配器模式(Adapter模式)介绍,本文讲解了为何使用适配器模式、如何使用适配器模式等内容,需要的朋友可以参考下

    JAVA设计模式chm文档

    设计模式之Adapter(适配器) 设计模式之Composite(组合) 设计模式之Decorator(油漆工) 设计模式之Bridge 设计模式之Flyweight(享元) 行为模式: 设计模式之Template 设计模式之Memento(备忘机制) 设计模式之Observer ...

    Java24种设计模式,Java24种设计模式,24种设计模式,学会了这24种设计模式,可以打遍天下无敌手,设计模式非常重要

    8、适配器模式ADAPTER PATTERN 9、模板方法模式TEMPLATE METHOD PATTERN 10、建造者模式BUILDER PATTERN 11、桥梁模式BRIDGE PATTERN 12、命令模式COMMAND PATTERN 13、装饰模式DECORATOR PATTERN 14、迭代器模式...

    33种JAVA设计模式DEMO

    这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。 工厂模式(Factory Pattern) 抽象工厂模式...

    Design-pattern-Adapter-Factory-Command-Memento:Java中的Adapter&Factory&Command&Memento设计模式

    设计模式-适配器-工厂-命令-备忘录Java中的Adapter&Factory&Command&Memento设计模式GoodHealth Fitness Corporation 是一家大型健身俱乐部。 它提供最先进的设备供其成员使用。 公司维护一个会员系统,用于记录会员...

    Java优良的Adapter模式:适配器模式

     Adapter模式也叫适配器模式,是由GoF提出的23种设计模式的一种。Adapter模式是构造型模式之一,通过Adapter模式,可以改变已有类(或外部类)的接口形式。  在大规模的系统开发过程中,我们常常碰到诸如以下...

    [Java设计模式(第2版)(Design.Patterns.in.Java).John.Metsker

    《java设计模式(第2版)》通过一个完整的java项目对经典著作design patterns一书介绍的23种设计模式进行了深入分析与讲解,实践性强,却又不失对模式本质的探讨。本书创造性地将这些模式分为5大类别,以充分展现各个...

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

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

    研磨设计模式-part2

    《研磨设计模式》完整覆盖GoF讲述的23个设计模式并加以细细研磨。初级内容从基本讲起,包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等,让读者能系统、完整、准确地掌握每个模式,...

    研磨设计模式-part4

    《研磨设计模式》完整覆盖GoF讲述的23个设计模式并加以细细研磨。初级内容从基本讲起,包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等,让读者能系统、完整、准确地掌握每个模式,...

Global site tag (gtag.js) - Google Analytics