选择显示字体大小

java结构性模式之变压器模式介绍(一)

什么是结构性模式

  结构性模式描述类和对象怎样结合在一起成为较大的结构。 结构性模式描述两种不同的东西:类与类的实例。根据它们所描述的东西的不同, 结构性模式可以分为类结构模式和实例结构模式两种。

  类结构模式使用继承(inheritance)来把类,接口等组合在一起,形成更大的结构。 当一个类从父类继承,并实现某接口时,这个新的类就把父类的结构和接口的结构结合起来。 类结构模式是静态的。一个类结构模式的典型的例子,就是类形式的变压器模式

  实例结构模式描述各种不同类型的把对象组合在一起,实现新的功能的方法。实例结构模式是动态的。 一个典型的实例结构模式,就是代理人模式,代理人模式将在以后介绍。其它的例子包括后面将要介绍的复合模式, 飞行重量模式,装饰模式,以及实例形式的变压器模式等。

  有一些模式会有类结构模式的形式和实例结构模式的形式两种,成为以上两种形式的结构模式的极好注解。 本节要介绍的变压器模式就是这样,它有类形式和实例形式两种。

  变压器模式的介绍

  变压器模式把一个类的接口变换成客户端所期待的另一种接口。变压器模式使原本无法在一起工作的两个类能够在一起工作。 如前所述,变压器模式是关于类结构的结构性模式,因而是静态的模式

  这很象变压器(adapter)---变压器把一种电压变换成另一种电压。当我把美国的电器拿回中国大陆去用的时候, 我就面临电压不同的问题。美国的生活用电压是110伏,而中国的电压是220伏。我如果要在中国大陆使用我在美国使用的电器, 我就必须有一个能把220伏电压转换成110伏电压的变压器。而这正象是本模式所做的事,因此此模式被称为变压器模式

  读者可能也会想到,adapter在中文也可翻译为转换器(适配器)。实际上,转换器(适配器)也是一个合适的名字。仍用电器作例子, 美国的电器的插头一般是三相的,即除了阳极,阴极外,还有一个地极。中国大陆的建筑物内的电源插座一般只有两极,没有地极。 这时候,即便电器的确可以接受220伏电压,电源插座和插头不匹配,也使电器无法使用。 一个三相到两相的转换器(适配器)就能解决这个问题。因此此模式也可被称为转换器(适配器)模式

  同时,这种做法也很象包装过程,被包装的物体的真实样子被包装所掩盖和改变,因此有人把这种模式叫做包装(wrapper)模式。事实上, 我们经常写很多这样的wrapper类,把已有的一些类包裹起来,使之能有满足需要的接口。

  变压器模式有类形式和实例形式两种不同的形式。
类形式的变压器模式的定义

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

图1. 类形式的类变压器模式的类图定义

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

目标(target)。这就是我们所期待得到的接口。注意,由于这里讨论的是类变压器模式,因此目标不可以是类。


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


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

  本模式的示范代码如下:


package com.javapatterns.adapter.classadapter;
public interface target
{
    /**
     * class adaptee contains operation sampleoperation1.
     */
    void sampleoperation1();
    /**
     * class adaptee doesn't contain operation sampleoperation2.
     */
    void sampleoperation2();
}

代码清单1. target的源代码。


package com.javapatterns.adapter.classadapter;
public class adaptee
{
    public void sampleoperation1(){}
}


代码清单2. adaptee的源代码。


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)掉源的一些方法。

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

from-yesky


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons