Chinese => English
『一只小蚂蚁』的专栏
BlogJava
|
首页
|
发新随笔
|
发新文章
|
联系
|
聚合
|
管理
随笔:135 文章:0 评论:250 引用:0
『蚂蚁学模式』之实例化装饰(Decorator)模式
又称包装(wrapper)模式。
以对客户端
透明
(客户端并不会觉得对象在装饰前后有什么不同,老孙就是老孙!^_^)的方式扩展对象的功能,是继承关系的一个替代方案。
何时使用?
1. 需要扩展一个类的功能,或给一个类增加附加责任。
2. 需要动态地给一个对象增加功能,这些功能可以再动态地撤销。
3. 需要增加由一些基本功能的排列组合而产生的非常大量的功能,从而使继承关系变得不现实。
优点:
1. 可以提供比继承更多的灵活性。
2. 通过使用不同的具体装饰类以及这些装饰类的排列组合,设计师可以创造出很多不同行为的组合。
缺点:
1. 会产生比使用继承关系更多的对象,会使得查错变得困难。
类图示意:
1. com.cleversoft.designpatterns.decorator.Widget.java:
package
com.cleversoft.designpatterns.decorator;
public
interface
Widget
{
void
draw();
}
2. com.cleversoft.designpatterns.decorator.TextField.java:
package
com.cleversoft.designpatterns.decorator;
public
class
TextField
implements
Widget
{
private
int
width, height;
public
TextField(
int
width,
int
height)
{
this
.width
=
width;
this
.height
=
height;
}
public
void
draw()
{
System.out.println(
"
TextField:
"
+
width
+
"
,
"
+
height);
}
}
3. com.cleversoft.designpatterns.decorator.Decorator.java:
package
com.cleversoft.designpatterns.decorator;
public
abstract
class
Decorator
implements
Widget
{
private
Widget wid;
public
Decorator(Widget wid)
{
this
.wid
=
wid;
}
public
void
draw()
{
wid.draw();
}
}
4. com.cleversoft.designpatterns.decorator.BorderDecorator.java:
package
com.cleversoft.designpatterns.decorator;
public
class
BorderDecorator
extends
Decorator
{
public
BorderDecorator(Widget wid)
{
super
(wid);
}
public
void
draw()
{
super
.draw();
System.out.println(
"
BorderDecorator
"
);
}
}
5. com.cleversoft.designpatterns.decorator.ScrollDecorator.java:
package
com.cleversoft.designpatterns.decorator;
public
class
ScrollDecorator
extends
Decorator
{
public
ScrollDecorator(Widget wid)
{
super
(wid);
}
public
void
draw()
{
super
.draw();
System.out.println(
"
ScrollDecorator
"
);
}
}
6. com.cleversoft.designpatterns.decorator.Client.java:
package
com.cleversoft.designpatterns.decorator;
public
class
Client
{
public
static
void
main(String[] args)
{
//
Widget w = new TextField(20, 10);
//
Widget b = new BorderDecorator(w);
//
b.draw();
Widget w
=
new
BorderDecorator(
new
ScrollDecorator(
new
TextField(
50
,
20
)));
w.draw();
}
}
参考资料:
1. 《Java与模式》
2. Design Patterns With Code
欢迎大家访问我的个人网站
萌萌的IT人
发表于 2007-01-31 23:05
Thomas
阅读(560)
评论(0)
编辑
收藏
所属分类:
蚂蚁学模式
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
『蚂蚁学模式』之实例化策略(Strategy)模式
『蚂蚁学模式』之实例化门面(Facade)模式
『蚂蚁学模式』之实例化代理(Proxy)模式
『蚂蚁学模式』之实例化装饰(Decorator)模式
『蚂蚁学模式』之实例化合成(Composite)模式
『蚂蚁学模式』之实例化缺省适配器(Default Adapter)模式
『蚂蚁学模式』之实例化适配器(Adapter)模式
『蚂蚁学模式』之实例化原型模式
『蚂蚁学模式』之实例化建造者模式
『蚂蚁学模式』之实例化单例模式(二)
<
2007年1月
>
日
一
二
三
四
五
六
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
29
30
31
1
2
3
4
5
6
7
8
9
10
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(9)
给我留言
查看公开留言
查看私人留言
随笔分类
(138)
Agile(3)
(rss)
AppFuse(1)
(rss)
Apusic OperaMasks(1)
(rss)
Books(1)
(rss)
Business & Finance(1)
(rss)
DDD(2)
(rss)
Design Patterns(1)
(rss)
Eclipse(4)
(rss)
EJB3.0
(rss)
Groovy & Grails
(rss)
Hibernate(3)
(rss)
Internet
(rss)
J2EE核心模式(2)
(rss)
Java ABC(4)
(rss)
Java EE(6)
(rss)
JavaScript & Ajax(2)
(rss)
JBoss Seam(5)
(rss)
JPA(1)
(rss)
JSF(2)
(rss)
Life(15)
(rss)
Open Source(3)
(rss)
Other(40)
(rss)
Portal(1)
(rss)
Pylons学习(3)
(rss)
Python(2)
(rss)
Security(2)
(rss)
Spring(3)
(rss)
TDD(3)
(rss)
Writing(1)
(rss)
一周阅读推荐(3)
(rss)
蚂蚁学模式(23)
(rss)
随笔档案
(135)
2007年11月 (9)
2007年10月 (5)
2007年9月 (10)
2007年8月 (13)
2007年7月 (8)
2007年6月 (7)
2007年5月 (10)
2007年4月 (10)
2007年3月 (4)
2007年2月 (5)
2007年1月 (12)
2006年12月 (13)
2006年11月 (7)
2006年10月 (2)
2006年9月 (15)
2006年8月 (4)
2006年7月 (1)
相册
Technology
收藏夹
(38)
Design Patterns(3)
(rss)
InfoQ(9)
(rss)
Java(1)
(rss)
JBoss Seam(6)
(rss)
My Articles(11)
(rss)
Reading(8)
(rss)
About me
my "douban" on douban
my "fanfou" on fanfou
my blog on baidu
my bookmarks on del.icio.us
my photos on picasaweb
Blogs
Anders小明的Blog
BlueDavy之技术Blog
Chris Richardson
gigix
Martin Fowler
Michael Yuan
robbin
梦想风暴
江南白衣
简单就是美!
胡长城(银狐999)BLOG
良葛格學習筆記
蛟龍居
键盘上的舞者
Classmates
碧涛居
Coworkers
一个基督徒的在世历程
English
BBC China
普特英语听力
Friends
BeanSoft
main()
刘玉辉
双鱼瓶
小献
曹江华
阿蜜果
Java
BlogJava
Blogs Summary
DevX: Java Zone
DZone
Huihoo
IBM developerWorks 中国
InfoQ
JAVA DEVELOPER'S JOURNAL
javablogs
JavaEye
javapassion.com
JavaWorld
Java站点
JBoss Seam中文站
JCP
Java Community Process
J道
Object Mentor Blog
ONJava
Raible Designs | Java
TSS
Open Source
appfuse
EasyJF
Java开源大全
JBoss Seam
OperaMasks.org
OSGi.org.cn
PicoContainer
projecttrack
Project Track - a JSF/Spring/Hibernate/Acegi example application
Redsaga
SpringSide
最新随笔
1. 【转载】你的时间在那里,成就就在那里
2. Seam能否取代Struts?
3. 【一周阅读推荐】2007.11.05—2007.11.11
4. 选择Seam的十大理由
5. 《JBoss Seam:一个深度集成框架》pdf文件下载
6. 在JBoss AS下部署Seam示例程序
7. 【翻译】Spring 2.5架构图
8. 【一周阅读推荐】2007.10.29—2007.11.04
9. JBoss Seam中文站发布
10. web2.0最全的国外API应用集合
11. 【一周阅读推荐】2007.10.22—2007.10.28
12. 记住,你的兜里只有100块!
13. 【转载】我最恐惧的事情是竞争力的丧失
14. 【翻译】RIA入门知识
15. 【翻译】比较NetBeans 6.0 M10和IntelliJ IDEA 7.0 M1
16. 【转载】Web2.0@China!
17. 【转载】正确地做事与做正确的事同样重要
18. 【转载】你必须要有一样拿得出手
19. 极限编程
20. 敏捷软件开发
搜索
积分与排名
积分 - 184207
排名 - 312
最新评论
1. viagra sale
Hello!
--viagra_sale
2. generic cialis paypal payment
Hello!
--cialis
3. re: 【转载】你的时间在那里,成就就在那里
很多东西也就深明大意了 路就走的更远了
--水泵
4. re: 实战struts2——用户登录
请问你的web。xml 是怎么写的
--111222
5. re: 【翻译】不使用Spring的5个理由
在你需要的时候使用
--haremeat
阅读排行榜
1. 实战struts2——用户登录(15012)
2. 实战struts2——Hello World(8406)
3. 《JBoss Seam:一个深度集成框架》pdf文件下载(8058)
4. 极限编程(5713)
5. 【翻译】Spring 2.5架构图(5319)
评论排行榜
1. 【翻译】不使用Spring的5个理由(27)
2. J2EE without AJAX——Apusic OperaMasks框架简介(16)
3. 《JBoss Seam:一个深度集成框架》pdf文件下载(15)
4. 【翻译】Spring 2.5架构图(14)
5. 【转载】你的时间在那里,成就就在那里(12)