装饰者模式()
PacketHTTPHeaderCreator与PacketHTMLHeaderCreator类似但是它完成数据包HTTP头部的处理其余业务处理依然交由内部的component完成
public class PacketHTTPHeaderCreator extends PacketDecorator{
public PacketHTTPHeaderCreator(IPacketCreator c) {
super(c)
}
@Override
public String handleContent() { //对给定数据加上HTTP头信息
StringBuffer sb=new StringBuffer()
sbappend(CacheControl:nocache\n)
sbappend(Date:MonDec::GMT\n)
sbappend(componenthandleContent())
return sbtoString()
}
}
对于装饰者模式另一个值得关注的地方是它的使用方法在本例中通过层层构造和组装这些装饰者和被装饰者到一个对象中使其有机地结合在一起工作
public class Main {
public static void main(String[] args) {
IPacketCreator pc=new PacketHTTPHeaderCreator(
new PacketHTMLHeaderCreator(
new PacketBodyCreator()))
Systemoutprintln(pchandleContent())
}
}
可以看到通过装饰者的构造函数将被装饰对象传入本例中共生成个对象实例作为核心组件的PacketBodyCreator最先被构造其次是PacketHTMLHeaderCreator最后才是PacketHTTPHeaderCreator
这个顺序表示首先由PacketBodyCreator对象去生成核心发布内容接着由PacketHTMLHeaderCreator对象对这个内容进行处理将其转化为HTML最后由PacketHTTPHeaderCreator对PacketHTMLHeaderCreator的输出安置HTTP头部程序运行的输出如下
CacheControl:nocache
Date:MonDec::GMT
<html><body>Content of Packet</body></html>
图是本例的调用堆栈从调用堆栈中读者应该可以更容易地理解各个组件间的相互关系
图 装饰者模式示例调用堆栈
在JDK的实现中有不少组件也是用装饰者模式实现其中一个最典型的例子就是OutputStream和InputStream类族的实现以OutputStream为例OutputStream对象提供的方法比较简单功能也比较弱但通过各种装饰者的增强OutputStream对象可以被赋予强大的功能
图显示了以OutputStream为核心的装饰者模式的实现其中FileOutputStream为
图 装饰者模式在OutputStream中的应用
返回目录Java程序性能优化让你的Java程序更快更稳定
编辑推荐
Java程序设计培训视频教程
JEE高级框架实战培训视频教程
JME移动开发实战教学视频
Visual C++音频/视频技术开发与实战
Oracle索引技术
ORACLEG数据库开发优化指南