季浩的Blog
努力
BlogJava
首页
新随笔
联系
聚合
管理
随笔-46 评论-64 文章-2 trackbacks-0
设计模式学习(二) Adapter Partten
Adapter模式
使用Adapter模式的目的:把一个类的接口转换成客户端需要的接口。
适用场合:
当你想使用一个现有类的功能,但是它的接口不能满足你的需要
当你想创建一个循环使用的类,用于使一些没有相互联系的类,或者是未知的将来会引进的类之间协调合作完成某些功能。也就是说,这些类不必要具备一致的接口
当你要使用数个现有的的子类,但是要对每一个子类进行接口的改写变得很不切实际。
具体的例子
变压器(Adapter),变压器把一种电压变换成另一种电压。美国的生活用电电压是110V,而中国的电压是220V。如果要在中国使用美国电器,就必须有一个能把220V电压转换成110V电压的变压器。这个变压器就是一个Adapter。
客户买回了美国的电器Machine,工作电压110V,电器插头为3相(阴、阳、地级),所以需要一个电压和相级的转换器或者说是适配器来使这个Machine能在中国使用。
一、类的Adapter模式
package
Adapter;
interface
电器需要使用
{
public
void
两相插口();
public
void
电压_110V();
}
class
中国_供电
{
protected
int
v;
public
中国_供电()
{
v
=
220
;
System.out.println(
"
中国供电提供的电压是:
"
+
v
+
"
V
"
);
}
//
返回中国电压的值
public
int
voltage()
{
return
v;
}
}
class
变压器_相位转换器
extends
中国_供电
implements
电器需要使用
{
public
void
两相插口()
{
System.out.println(
"
变压器_相位转换器——提供三相到两相转换操作,返回两相插口
"
);
}
public
void
电压_110V()
{
v
=
this
.voltage()
/
2
;
System.out.println(
"
变压器_相位转换器——转换后提供电压为:
"
+
v
+
"
V
"
);
}
}
public
class
ClassAdapter
{
public
static
void
main(String[] args)
{
变压器_相位转换器 device
=
new
变压器_相位转换器();
device.电压_110V();
device.两相插口();
System.out.println(
"
经过变压器_相位转换器的包装(Warpper),在美国买来的电器能够使用啦!^0^
"
);
}
}
二、对象的Adapter模式
package
Adapter;
interface
电器需要使用_a
{
public
void
两相插口();
public
void
电压_110V();
}
class
中国_供电_a
{
protected
int
v;
public
中国_供电_a()
{
v
=
220
;
System.out.println(
"
中国供电提供的电压是:
"
+
v
+
"
V
"
);
}
//
返回中国电压的值
public
int
voltage()
{
return
v;
}
}
class
变压器_相位转换器_a
implements
电器需要使用_a
{
中国_供电_a supply
=
new
中国_供电_a();
public
void
两相插口()
{
System.out.println(
"
变压器_相位转换器——提供三相到两相转换操作,返回两相插口
"
);
}
public
void
电压_110V()
{
supply.v
=
supply.voltage()
/
2
;
System.out.println(
"
变压器_相位转换器——转换后提供电压为:
"
+
supply.v
+
"
V
"
);
}
}
public
class
ObjectAdapter
{
public
static
void
main(String[] args)
{
变压器_相位转换器_a device
=
new
变压器_相位转换器_a();
device.电压_110V();
device.两相插口();
System.out.println(
"
经过变压器_相位转换器的包装(Warpper),在美国买来的电器能够使用啦!^0^
"
);
}
}
posted on 2006-02-24 21:13
jht
阅读(1003)
评论(0)
编辑
收藏
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
读书:
《JAVA与模式》阎宏
《精通正则表达式》
《Perl语言入门》
《J2EE Development without EJB》
BlogJava-季浩的Blog
100.0%男性倾向,0.0%女性倾向
评点:您的文风冷静而镇定,言语间展现出强悍的思辨能力与恢宏的胸襟,一个男子汉的阳刚形象跃然纸上。
yodao
|
博客男女
很不错的网站,在线冲手机费
<
2006年2月
>
日
一
二
三
四
五
六
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
1
2
3
4
5
6
7
8
9
10
11
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(2)
给我留言
查看公开留言
查看私人留言
随笔分类
DWR(2)
Eclipse(2)
Groovy&Grails(1)
GWT(1)
Hibernate(1)
J2EE(7)
J2ME(4)
J2SE(14)
OSGI(2)
Pattern
Spring
Struts1(1)
Struts2(2)
Swing Tips(5)
数独程序(1)
随笔档案
2008年9月 (7)
2008年8月 (3)
2008年7月 (3)
2008年5月 (2)
2008年4月 (1)
2008年3月 (1)
2008年1月 (2)
2007年11月 (2)
2007年10月 (2)
2007年9月 (4)
2007年8月 (1)
2007年7月 (2)
2007年5月 (1)
2007年3月 (4)
2007年1月 (4)
2006年12月 (3)
2006年3月 (1)
2006年2月 (2)
文章档案
2008年7月 (1)
2008年4月 (1)
我的BLOG
我的.NET和其他相关主题Blog
我的C/C++博客
搜索
积分与排名
积分 - 103225
排名 - 561
最新评论
1. re: 使用JSON和AJAX创建网站的标签云(TagCloud)
顶
--fffr
2. re: Q:为什么透明的PNG格式图片在网页里显示的时候不是透明的?
因为你的网页背景
--shndpz
3. re: 使用WebService 和RMI远程协作
实现类没有找到
--11
4. re: Groovy Plugin for Eclipse IDE
安装后,新建菜单里看不到Groovy Project的选项?
--雷纳德
5. re: Q: response.setHeader("Cache-Control","no-cache"); 是干什么用的?目的是什么?
我个人认为是不缓存或者保存你这次返回的信息,
比如我们在网页上生成图片,但不希望这些图片一直占据内存,就可以使用这个策略吧。
--kaki
阅读排行榜
1. Unable to load bean org.apache.struts2.dispatcher.multipart.MultiPartRequest (jakarta) - [unknown location](17135)
2. Q: response.setHeader("Cache-Control","no-cache"); 是干什么用的?目的是什么?(16567)
3. [JSP] The function *** cannot be located with the specified prefix(7705)
4. [DWR]Max depth exceeded when dereferencing(4195)
5. [DWR] --Erroring: batchId[1] message[org.directwebremoting.extend.MarshallException: Error marshalling ...(4159)
评论排行榜
1. Unable to load bean org.apache.struts2.dispatcher.multipart.MultiPartRequest (jakarta) - [unknown location](11)
2. 设计模式学习(一) 工厂模式之简单工厂(7)
3. [DWR]Max depth exceeded when dereferencing(5)
4. MyScreenSnap 一个简单的截图程序(5)
5. [DWR] --Erroring: batchId[1] message[org.directwebremoting.extend.MarshallException: Error marshalling ...(4)