动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.Class文件详解 (2).
.用构建器自动初始化.
.银行取款机Cash系统源程序.
.setUTCMonth 方法.
.全面研读EJB 2.0(3).
.Java编程新手入门:运算符优先级.
.基于Java的动画编程基础第一部分.
.有感Java is not platform-indep.
.使用BMT消息驱动BEAN和SPRING进行.
.用Java插件在浏览器中运行Java2 .
.Remove 方法.
.在Java中操作Zip文件,压缩/解压.
.通过开发一个STRUTS项目的体会.
.Java 图形用户界面设计.
.全面认识JUnit 4的新特征.
.用于Java SE的Hibernate.
.Java 中的父子关系及 inverse 详.
.程序员的.NET时代(2).
.编写跨平台Java程序注意事项.
.用Spring AOP实现开发中松散耦合.

爪哇语言结构性模式之变压器模式介绍(上)

发表日期:2008-1-5 |



  什么是结构性模式
  结构性模式描述类和对象怎样结合在一起成为较大的结构。 结构性模式描述两种不同的东西:类与类的实例。根据它们所描述的东西的不同, 结构性模式可以分为类结构模式和实例结构模式两种。
  类结构模式使用继续(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)掉源的一些方法。
  第三、 由于只引进了一个变压器类,因此只有一个路线到达目标类。问题得到简化。
  实例形式的变压器模式的类图定义如下。
  爪哇语言结构性模式之变压器模式介绍(上)(图二)
  在图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中的变压器模式的使用
  在爪哇语言2.0的标准SDK中,有很多的变压器类。如:
  库程序包java\awt\event中有
  ComponentAdapter
  ContainerAdapter
  FocusAdapter
  HierarchyBoundsAdapter
  KeyAdapter
  MouseAdapter
  MouseMotionAdapter
  WindowAdapter
  库程序包Javax\swing\event中有
  InternalFrameAdapter
  MouseInputAdapter
  这些都是变压器模式使用的实际例子。值得指出的是,WindowAdapter的建立者们不可能预见到你所要使用的目标接口, 因此WindowAdapter不可能实现你的目标接口。但是,在考察了这些变压器类的使用范围之后,我们会发现, WindowAdapter只需实现WindowListener的接口即可,也就是说,目标接口被省略了。请见下面的解释。
上一篇:设计模式之Facade(外观) 人气:508
下一篇:爪哇语言单态创立性模式介绍(上) 人气:470
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-10 企业网站智能管理系统(TZIMS) v6
2008-10-10 拓文asp.net网站内容管理系统 v6
2008-10-10 动网论坛PHP版 v2.0++ Build 081
2008-10-10 免费时代CMS v5.0
2008-10-10 wodig第四季中文DIGG社区 v4.1 b
2008-10-10 老Y文章管理系统 v2.2 bulid 081
2008-10-10 魔法盒动感相册 ASP+SQL版 v2.0
2008-10-10 Asoft签到管理系统 v3.0 Pack1
2008-10-10 哥特人音乐网潮流留言本 v1.1
2008-9-29 酷狗音乐(原KuGoo)2008 v5.310 正
2008-9-29 QQTab 1.1
2008-9-29 网络传送带 Net Transport 2.64a
2008-9-29 谷歌金山词霸v1.8
2008-9-29 TweakVI 1.0 Build 1090
2008-9-29 ACDSee Pro 2.5 Build 333 汉化绿
2008-9-29 Winamp v5.541(2189) 周明波简体
2008-9-27 CCleaner 2.12.651
2008-9-27 Mozilla Thunderbird 2.0.0.17 英
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号