没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
Java 设计模式
1、爪哇语言结构性模式之变压器模式介绍
1.1、什么是结构性模式
结构性模式描述类和对象怎样结合在一起成为较大的结构。 结构性模式描述两种
不同的东西:类与类的实例。根据它们所描述的东西的不同, 结构性模式可以分为类
结构模式和实例结构模式两种。
类结构模式使用继承(inheritance)来把类,接口等组合在一起,形成更大的结构。
当一个类从父类继承,并实现某接口时,这个新的类就把父类的结构和接口的结构结合
起来。 类结构模式是静态的。一个类结构模式的典型的例子,就是类形式的变压器模
式。
实例结构模式描述各种不同类型的把对象组合在一起,实现新的功能的方法。实例
结构模式是动态的。 一个典型的实例结构模式,就是代理人模式,代理人模式将在以
后介绍。其它的例子包括后面将要介绍的复合模式, 飞行重量模式,装饰模式,以及
实例形式的变压器模式等。
有一些模式会有类结构模式的形式和实例结构模式的形式两种,成为以上两种形式
的结构模式的极好注解。 本节要介绍的变压器模式就是这样,它有类形式和实例形式
两种。
1.2、变压器模式的介绍
变压器模式把一个类的接口变换成客户端所期待的另一种接口。变压器模式使原本
无法在一起工作的两个类能够在一起工作。 如前所述,变压器模式是关于类结构的结
构性模式,因而是静态的模式。
这很象变压器(Adapter)---变压器把一种电压变换成另一种电压。当我把美国的电器
拿回中国大陆去用的时候, 我就面临电压不同的问题。美国的生活用电压是 110 伏,
而中国的电压是 220 伏。我如果要在中国大陆使用我在美国使用的电器, 我就必须有
一个能把 220 伏电压转换成 110 伏电压的变压器。而这正象是本模式所做的事,因此
此模式被称为变压器模式。
读者可能也会想到,Adapter 在中文也可翻译为转换器(适配器)。实际上,转换器
(适配器)也是一个合适的名字。仍用电器作例子, 美国的电器的插头一般是三相的,
即除了阳极,阴极外,还有一个地极。中国大陆的建筑物内的电源插座一般只有两极,
没有地极。 这时候,即便电器的确可以接受 220 伏电压,电源插座和插头不匹配,也
使电器无法使用。 一个三相到两相的转换器(适配器)就能解决这个问题。因此此模
式也可被称为转换器(适配器)模式。
同时,这种做法也很象包装过程,被包装的物体的真实样子被包装所掩盖和改变,
因此有人把这种模式叫做包装(Wrapper)模式。事实上, 我们经常写很多这样的
wrapper 类,把已有的一些类包裹起来,使之能有满足需要的接口。
变压器模式有类形式和实例形式两种不同的形式。
1.3、类形式的变压器模式的定义
类形式的变压器模式的类图定义如下。
图 1.1 类形式的类变压器模式的类图定义
在图 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. 1Target
的源代码。
package com.javapatterns.adapter.classAdapter;
public class Adaptee
{
public void sampleOperation1(){}
}
代码清单
1.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
}
}
代码清单
1.3 Adapter
的源代码。
类形式的变压器模式的效果
第一、 使用一个实类把源(Adaptee)适配到目标(Target)。这样一来,如果你想把
源以及源的子类都使用此类适配, 就行不通了。
第二、 由于变压器类是源的子类,因此可以在变压器类中置换(override)掉源的
一些方法。
第三、 由于只引进了一个变压器类,因此只有一个路线到达目标类。问题得到简
化。
1.4、实例形式的变压器模式的定义
实例形式的变压器模式的类图定义如下。
图 1.2 实例变压器模式的类图定义
在图 1.2 可以看出,模式所涉及的成员有:
• 目标(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();
}
代码清单
1.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;
}
代码清单
1.5. Adapter
的源代码。
package com.javapatterns.adapter;
public class Adaptee {
public void sampleOperation1(){}
}
代码清单
1.6. Adaptee
的源代码。
1.5、实例形式的变压器模式的效果
第一、 一个变压器可以把多种不同的源适配到同一个目标。换言之,同一个变压
器可以把源类和它的子类都适配到目标接口。
第二、 与类形式的变压器模式相比,要想置换源类的方法就不容易。如果一定要
置换掉源类的一个或多个方法,就只好先做一个源类的子类, 将源类的方法置换掉,
然后再把源类的子类当作真正的源进行适配。
第三、 虽然要想置换源类的方法不容易,但是要想增加一些新的方法则方便得很。
而且新增加的方法同时适用于所有的源。
在什么情况下使用变压器模式
在以下各种情况下使用变压器模式:
第一、 你需要使用现有的类,而此类的接口不符合你的需要。
第二、 你想要建立一个可以重复使用的类,用以与一些彼此之间没有太大关联的
一些类, 包括一些可能在将来引进的类一起工作。这些源类不一定有很复杂的接口。
第三、 (对实例形式的变压器模式而言)你需要改变多个已有的子类的接口, 如
果使用类形式的变压器模式,就要针对每一个子类做一个变压器类,而这不太实际。
1.6、J2SE 中的变压器模式的使用
在爪哇语言 2.0 的标准 SDK 中,有很多的变压器类。如:
剩余106页未读,继续阅读
秋影阑珊
- 粉丝: 5
- 资源: 16
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (大赛作品)STM32实现的F072RB NUCLEO智能家居控制.zip
- STM32实现的数字示波器源码+数字信号处理教程、配套实例.zip
- 【cookie续续】【cookie续续】【cookie续续】
- 低功耗STM32实现的F411开发板(原理图+PCB源文件+官方例程+驱动等).zip
- 基于stm32实现的 nucleo-L476的智能灯(操作说明+源码).zip
- 基于STM32实现的 NUCLEO板设计彩色LED照明灯(纯cubeMX开发).zip
- 基于STM32实现的 的联合调试侦听设备解决方案(原理图、PCB源文件、调试工具、视频).zip
- 基于STM32实现的 人群定位、调速智能风扇设计(程序、设计报告、视频演示).zip
- 哔哩下载姬(DownKyi)
- 千纬认字app再次更新,增加部首、笔画动画功能
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0