动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.VolumeName 属性.
.面向对象编程之:Java collectio.
.技巧:Java垃圾收集器使用小诀窍.
.推技术聊天室的实现(上).
.好的连接池,免费的.
.DB2 J2EE开发成本收益分析(三).
.Java虚拟机CACAO 0.95 .
.Java异常处理的特殊情况.
.布尔型.
.在自制主页中实现游走字幕.
.用java中的canendal 如何计算两个.
.用JAVA解压ZIP.
.深入解析:J2ME 的平台体系结构.
.选 择 您 需 要 的 Java 书 籍.
.Java网络编程之传输控制协议(三).
.java基础:遍历m取n的所有组合.
.深入浅出基于Java的解释器设计模.
.安全技术 Java与安全性,第2部分.
.用 Java 反射构建更通用的业务委.
.定义Lucene 1.3 用到的索引文件格.

Java设计模式之装饰模式(1)

发表日期:2008-1-5 |


说明:

装饰模式是在不必改变原类文件和使用继续的情况下,动态的扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。

装饰模式的特点;

(1) 装饰对象和真实对象有相同的接口。这样客户端对象就可以以和真实对象相同的方式和装饰对象交互。

(2) 装饰对象包含一个真实对象的索引(reference)

(3) 装饰对象接受所有的来自客户端的请求。它把这些请求转发给真实的对象。

(4) 装饰对象可以在转发这些请求以前或以后增加一些附加功能。这样就确保了在运行时,不用修改给定对象的结构就可以在外部增加附加的功能。在面向对象的设计中,通常是通过继续来实现对给定类的功能扩展。

下表格列举了装饰模式和继续的不同:

装饰模式 VS 继续

装饰模式 继续

用来扩展特定对象的功能 用来扩展一类对象的功能

不需要子类 需要子类

动态地 静态地

运行时分配职责 编译时分派职责

防止由于子类而导致的复杂和混乱 导致很多子类产生,在一些场合,报漏类的层次

更多的灵活性 缺乏灵活性

对于一个给定的对象,同时可能有不同的装饰对象,客户端可以通过它的需要选择合适的装饰对象发送消息。 对于所有可能的联合,客户期望

很轻易增加任何的 困难

例子:

让我们重新返回我们在工厂方法和单例模式log实用工具上,我们的模式主要由Logger 接口和两个它的实现类??FileLogger和ConsoleLogger??分别把信息出力到一个文件和屏幕中。另外,还有包括工厂方法的LoggerFactory类。

LoggerFactory没有出现在下图中,主要是因为它和现在讨论的例子没有直接联系。

让我们想象一些客户端需要以超出Logger Utility现在所提供的新的方式出力信息,客户端需要下面两种特征;

(1) 把出力的信息传唤为Html文档

(2) 对出力信息进行逻辑转化的简单加密,在面向对象的设计中,不改变现存的类的代码,可以应用继续来增加新的功能。例如,子类化现在的类重载它的方法来增加所需要的新功能。

应用继续,我们要子类化FileLogger和ConsoleLogger类来增加新的功能,会有下面的一组新的子类:

子类 父类 功能

HTMLFileLogger FileLogger 转化出力信息为HTML文档,并存入一个Log文件

HTMLConsLogger ConsoleLogger 转化出力信息为HTML文档,并显示在屏幕上

EncFileLogger FileLogger 加密出力信息,并存入一个Log文件

EncConsLogger ConsoleLogger 加密出力信息,并显示在屏幕上

从类图可以看到,为了实现新的功能加入了一组新的子类。假如我们还有其他的Logger类型(例如:DBLogger出力信息到数据库中),这样会有更多子类。当一个新的特性需要被加入,子类的数量会有成倍数的增长,同时我们会有一个庞大的类层次。

装饰模式使我们从这种情景中解脱出来,装饰模式推荐通过对象的合成而不是继续来包装一个对象扩展它的功能。

应用装饰模式,让我们为Logger Utility定义一个有下列特征的默认根装饰类LoggerDecorator:

(1) LoggerDecorator包括一个Logger实例的引用。这个引用指向它包含的Logger对象。

(2) LoggerDecorator实现Logger借口、提供Log方法的基本的默认实现,他只是简单的转发调用给它包含的Logger 对象。每一个LoggerDecorator子类保证定义log方法。

Listing 19.1: LoggerDecorator Class

  1. public class LoggerDecorator implements Logger {
  2. Logger logger;
  3. public LoggerDecorator(Logger inp_logger) {
  4. logger = inp_logger;
  5. }
  6. public void log(String DataLine) {
  7. /*
  8. Default implementation
  9. to be overriden by subclasses.
  10. */
  11. logger.log(DataLine);
  12. }
  13. }//end of class
每一个logger的装饰定义log方法使很重要的,因为装饰对象必须提供和它包装的对象相同的借口。当客户端创建一个装饰类的实例,客户端以与装饰类交互方式和客户端与拥有相同接口原对象的交互方式是一致的。

让我们定义LoggerDecorator的两个子类,HTMLLogger和EncryptLogger。

说明:

装饰模式是在不必改变原类文件和使用继续的情况下,动态的扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。

装饰模式的特点;

(1) 装饰对象和真实对象有相同的接口。这样客户端对象就可以以和真实对象相同的方式和装饰对象交互。

(2) 装饰对象包含一个真实对象的索引(reference)

(3) 装饰对象接受所有的来自客户端的请求。它把这些请求转发给真实的对象。

(4) 装饰对象可以在转发这些请求以前或以后增加一些附加功能。这样就确保了在运行时,不用修改给定对象的结构就可以在外部增加附加的功能。在面向对象的设计中,通常是通过继续来实现对给定类的功能扩展。


上一篇:用Java事件处理机制实现录制回放功能(1) 人气:509
下一篇:JFC/Swing活学活用之JLabel文字魔法 人气:515
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-9-4 LPLY CMS 网站管理系统 v5.0
2008-9-4 缤纷互动视频交友 v3.01.902
2008-9-4 ADN视频收藏专家 v3.0 bulid 080
2008-9-4 天空网络电影系统SKYUC v2.5.6 简
2008-9-4 Web Wiz Rich Text Editor(文本编
2008-9-4 幻影动漫网视频系统(Ppdong) v1.
2008-9-4 乐维电脑在线DIY配置系统
2008-9-4 老樊文章管理系统SQL版
2008-9-4 ASP.NET 2.53 缩略图水印组件源码
2008-8-23 Mini WinMount V0.4
2008-8-23 Vista优化大师3.11正式版
2008-8-23 Wine 1.13
2008-8-23 KlipFolio 5.0 Build 5899-80
2008-8-23 Windows Sysinternals Desktops
2008-8-23 OneTap Movies1.2破解版
2008-8-23 AnnotaterPDF阅读1.1.503 破解版
2008-8-23 SoundMeter分贝测量仪 v1.0汉化破
2008-8-23 iDrum音乐节拍1.0破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | Html转换js | js/vbs加密 | md5加密 | 进制转换
实用工具:汉字翻译拼音 | 符号对照表 | 个税计算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵