知识大全 爪哇语言结构性模式之变压器模式介绍(上)
Posted 知
篇首语:过去并不等于未来,一定会有辉煌的一天,相信自己!本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 爪哇语言结构性模式之变压器模式介绍(上)相关的知识,希望对你有一定的参考价值。
什么是结构性模式 结构性模式描述类和对象怎样结合在一起成为较大的结构 结构性模式描述两种不同的东西 类与类的实例 根据它们所描述的东西的不同 结构性模式可以分为类结构模式和实例结构模式两种 类结构模式使用继承(inheritance)来把类 接口等组合在一起 形成更大的结构 当一个类从父类继承 并实现某接口时 这个新的类就把父类的结构和接口的结构结合起来 类结构模式是静态的 一个类结构模式的典型的例子 就是类形式的变压器模式 实例结构模式描述各种不同类型的把对象组合在一起 实现新的功能的方法 实例结构模式是动态的 一个典型的实例结构模式 就是代理人模式 代理人模式将在以后介绍 其它的例子包括后面将要介绍的复合模式 飞行重量模式 装饰模式 以及实例形式的变压器模式等 有一些模式会有类结构模式的形式和实例结构模式的形式两种 成为以上两种形式的结构模式的极好注解 本节要介绍的变压器模式就是这样 它有类形式和实例形式两种 变压器模式的介绍 变压器模式把一个类的接口变换成客户端所期待的另一种接口 变压器模式使原本无法在一起工作的两个类能够在一起工作 如前所述 变压器模式是关于类结构的结构性模式 因而是静态的模式 这很象变压器(Adapter) 变压器把一种电压变换成另一种电压 当我把美国的电器拿回中国大陆去用的时候 我就面临电压不同的问题 美国的生活用电压是 伏 而中国的电压是 伏 我如果要在中国大陆使用我在美国使用的电器 我就必须有一个能把 伏电压转换成 伏电压的变压器 而这正象是本模式所做的事 因此此模式被称为变压器模式 读者可能也会想到 Adapter在中文也可翻译为转换器(适配器) 实际上 转换器(适配器)也是一个合适的名字 仍用电器作例子 美国的电器的插头一般是三相的 即除了阳极 阴极外 还有一个地极 中国大陆的建筑物内的电源插座一般只有两极 没有地极 这时候 即便电器的确可以接受 伏电压 电源插座和插头不匹配 也使电器无法使用 一个三相到两相的转换器(适配器)就能解决这个问题 因此此模式也可被称为转换器(适配器)模式 同时 这种做法也很象包装过程 被包装的物体的真实样子被包装所掩盖和改变 因此有人把这种模式叫做包装(Wrapper)模式 事实上 我们经常写很多这样的wrapper类 把已有的一些类包裹起来 使之能有满足需要的接口 变压器模式有类形式和实例形式两种不同的形式 类形式的变压器模式的类图定义如下 图 类形式的类变压器模式的类图定义 在图 可以看出 模式所涉及的成员有 目标(Target) 这就是我们所期待得到的接口 注意 由于这里讨论的是类变压器模式 因此目标不可以是类 源(Adaptee) 现有需要适配的接口 变压器(Adapter) 变压器类是本模式的核心 变压器把源接口转换成目标接口 显然 这一角色不可以是接口 而必须是实类 本模式的示范代码如下 package javapatterns adapter classAdapter; public interface Target /** * Class Adaptee contains operation sampleOperation */ void sampleOperation (); /** * Class Adaptee doesn t contain operation sampleOperation */ void sampleOperation (); 代码清单 Target的源代码 package javapatterns adapter classAdapter; public class Adaptee public void sampleOperation () 代码清单 Adaptee的源代码 package javapatterns adapter classAdapter; public class Adapter extends Adaptee implements Target /** * Class Adaptee doesn t contain operation sampleOperation */ public void sampleOperation () // Write your code here 代码清单 Adapter的源代码 类形式的变压器模式的效果 第一 使用一个实类把源(Adaptee)适配到目标(Target) 这样一来 如果你想把源以及源的子类都使用此类适配 就行不通了 第二 由于变压器类是源的子类 因此可以在变压器类中置换(override)掉源的一些方法 第三 由于只引进了一个变压器类 因此只有一个路线到达目标类 问题得到简化 实例形式的变压器模式的类图定义如下 在图 可以看出 模式所涉及的成员有 目标(Target) 这就是我们所期待得到的接口 目标可以是实的或抽象的类 源(Adaptee) 现有需要适配的接口 变压器(Adapter) 变压器类是本模式的核心 变压器把源接口转换成目标接口 显然 这一角色必须是实类 本模式的示范代码如下 package javapatterns adapter; public interface Target /** * Class Adaptee contains operation sampleOperation */ void sampleOperation (); /** * Class Adaptee doesn t contain operation sampleOperation */ void sampleOperation (); 代码清单 Target的源代码 package javapatterns adapter; public class Adapter implements Target public Adapter(Adaptee adaptee) super(); this adaptee = adaptee; public void sampleOperation () adaptee sampleOperation (); public void sampleOperation () // Write your code here private Adaptee adaptee; 代码清单 Adapter的源代码 package javapatterns adapter; public class Adaptee public void sampleOperation () 代码清单 Adaptee的源代码 实例形式的变压器模式的效果 第一 一个变压器可以把多种不同的源适配到同一个目标 换言之 同一个变压器可以把源类和它的子类都适配到目标接口 第二 与类形式的变压器模式相比 要想置换源类的方法就不容易 如果一定要置换掉源类的一个或多个方法 就只好先做一个源类的子类 将源类的方法置换掉 然后再把源类的子类当作真正的源进行适配 第三 虽然要想置换源类的方法不容易 但是要想增加一些新的方法则方便得很 而且新增加的方法同时适用于所有的源 在什么情况下使用变压器模式 在以下各种情况下使用变压器模式 第一 你需要使用现有的类 而此类的接口不符合你的需要 第二 你想要建立一个可以重复使用的类 用以与一些彼此之间没有太大关联的一些类 包括一些可能在将来引进的类一起工作 这些源类不一定有很复杂的接口 第三 (对实例形式的变压器模式而言)你需要改变多个已有的子类的接口 如果使用类形式的变压器模式 就要针对每一个子类做一个变压器类 而这不太实际 J SE中的变压器模式的使用 在爪哇语言 的标准SDK中 有很多的变压器类 如 库程序包java\\awt\\event中有 ComponentAdapter ContainerAdapter FocusAdapter HierarchyBoundsAdapter KeyAdapter MouseAdapter MouseMotionAdapter WindowAdapter 库程序包Javax\\swing\\event中有 InternalFrameAdapter MouseInputAdapter 这些都是变压器模式使用的实际例子 值得指出的是 WindowAdapter的建立者们不可能预见到你所要使用的目标接口 因此WindowAdapter不可能实现你的目标接口 但是 在考察了这些变压器类的使用范围之后 我们会发现 WindowAdapter只需实现WindowListener的接口即可 也就是说 目标接口被省略了 请见下面的解释 cha138/Article/program/Java/gj/201311/27469相关参考
正如同笔者在一节里介绍的工厂模式有简单工厂模式工厂方法模式和抽象工厂模式几种形态简单工厂模式已经在前面作过介绍在简单工厂模式中一个工厂类处于对产品类实例化调用的中心位置上它决定那一个产品类应当被实
简单地说观察者模式定义了一个一对多的依赖关系让一个或多个观察者对象监察一个主题对象这样一个主题对象在状态上的变化能够通知所有的依赖于此对象的那些观察者对象使这些观察者对象能够自动更新 观察者模式
工厂模式有简单工厂模式工厂方法模式和抽象工厂模式几种形态其中简单工厂模式和工厂方法模式已经在前面作过介绍在这里我们来介绍抽象工厂模式 抽象工厂模式是所有形态的工厂模式中最为抽象和最具广泛性的一种
packagejavapatternsfactorymethod; publicclassBadPlantExceptionextendsException publicBadPla
登记式单态类 登记式单态类是GoF为了克服饿汉式单态类及懒汉式式单态类均不可继承的缺点而设计的作者把他们的例子翻译为爪哇语言并将它自己实例化的方式从懒汉式改为饿汉式只是它的子类实例化的方式只能是
用Delphi语言来学设计模式之简单工厂篇 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 
知识大全 JavaScript模式之工厂模式(Factory)应用介绍
JavaScript模式之工厂模式(Factory)应用介绍 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看
Java设计模式之Iterator模式介绍 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!所谓Ite
《PHP设计模式介绍》第八章迭代器模式 类中的面向对象编程封装应用逻辑类就是实例化的对象每个单独的对象都有一个特定的身份和状态单独的对象是一种组织代码的有用方法但通常你会处理一组对象或者集合
知识大全 Oracle] Data Guard 之 三种保护模式介绍
Oracle]DataGuard之三种保护模式介绍 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!D