快速业务通道

Java语言结构性模式之变压器模式介绍 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22

package com.javapatterns.adapter.classAdapter; public class Adapter extends Adaptee implements Target {    /**    * Class Adaptee doesn''t contain operation sampleOperation2.    */    public void sampleOperation2()    {      // Write your code here    } }

代码清单3. Adapter的源代码。

类形式的变压器模式的效果

第一、使用一个实类把源(Adaptee)适配到目标(Target)。这样一来,如果你想把源以及源的子类都使用此类适配, 就行不通了。

第二、由于变压器类是源的子类,因此可以在变压器类中置换(override)掉源的一些方法。

第三、由于只引进了一个变压器类,因此只有一个路线到达目标类。问题得到简化。

实例形式的变压器模式的定义

实例形式的变压器模式的类图定义如下。

Java语言结构性模式之变压器模式介绍 - 编程入门网

图2. 实例变压器模式的类图定义

Java语言结构性模式之变压器模式介绍(3)

时间:2010-12-17

在图1可以看出,模式所涉及的成员有:

目标(Target)。这就是我们所期待得到的接口。目标可以是实的或抽象的类。

源(Adaptee)。现有需要适配的接口。

变压器(Adapter)。变压器类是本模式的核心。变压器把源接口转换成目标接口。 显然,这一角色必须是实类。

本模式的示范代码如下:

package com.javapatterns.adapter; public interface Target {    /**    * Class Adaptee contains operation sampleOperation1.    */    void sampleOperation1();    /**    * Class Adaptee doesn''t contain operation sampleOperation2.    */    void sampleOperation2(); }

代码清单4. Target的源代码。

package com.javapatterns.adapter; public class Adapter implements Target { public Adapter(Adaptee adaptee){      super();      this.adaptee = adaptee;    }    public void sampleOperation1(){      adaptee.sampleOperation1();    }    public void sampleOperation2(){      // Write your code here    }    private Adaptee adaptee; }

代码清单5. Adapter的源代码。

package com.javapatterns.adapter; public class Adaptee {    public void sampleOperation1(){} }

代码清单6. Adaptee的源代码。

实例形式的变压器模式的效果

第一、一个变压器可以把多种不同的源适配到同一个目标。换言之,同一个变压器可以把源类和它的子类都适配到目标接口。

第二、与类形式的变压器模式相比,要想置换源类的方法就不容易。如果一定要置换掉源类的一个或多个方法,就只好先做一个源类的子类, 将源类的方法置换掉,然后再把源类的子类当作真正的源进行适配。

第三、虽然要想置换源类的方法不容易,但是要想增加一些新的方法则方便得很。 而且新增加的方法同时适用于所有的源。

在什么情况下使用变压器模式

在以下各种情况下使用变压器模式:

第一、你需要使用现有的类,而此类的接口不符合你的需要。

第二、你想要建立一个可以重复使用的类,用以与一些彼此之间没有太大关联的一些类, 包括一些可能在将来引进的类一起工作。这些源类不一定有很复杂的接口。

第三、(对实例形式的变压器模式而言)你需要改变多个已有的子类的接口, 如果使用类形式的变压器模式,就要针对每一个子类做一个变压器类,而这不太实际。

J2SE中的变压器模式的使用

在Java语言2.0的标准SDK中,有很多的变压器类。如:

库程序包java\awt\event中有

ComponentAdapter ContainerAdapter FocusAdapter HierarchyBoundsAdapter KeyAdapter MouseAdapter MouseMotionAdapter WindowAdapter

库程序包Javax\swing\event中有

InternalFrameAdapter MouseInputAdapter

Java语言结构

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号