您的位置:首页技术文章
文章详情页

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

浏览:2日期:2024-06-28 09:08:44
内容: 实例形式的变压器模式的定义实例形式的变压器模式的类图定义如下。 IMG http://www.yesky.com/20011225/jt1225-1-objectadapter.gif[/IMG]图2. 实例变压器模式的类图定义 在图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中,有很多的变压器类。如: 库程序包javaawtevent中有 ComponentAdapter ContainerAdapter FocusAdapter HierarchyBoundsAdapter KeyAdapter MouseAdapter MouseMotionAdapter WindowAdapter 库程序包Javaxswingevent中有InternalFrameAdapter MouseInputAdapter 这些都是变压器模式使用的实际例子。值得指出的是,WindowAdapter的建立者们不可能预见到你所要使用的目标接口, 因此WindowAdapter不可能实现你的目标接口。但是,在考察了这些变压器类的使用范围之后,我们会发现, WindowAdapter只需实现WindowListener的接口即可,也就是说,目标接口被省略了。请见下面的解释。 from-yesky Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd
标签: Java
相关文章: