java-程序优化之装饰者模式

装饰者主要概述:

装饰者模式利用合成/聚合复用原则,使用委托机制,复用系统中的各个组件,在运行时,可以将这些组件进行叠加,从而构造出一个“超级对象”,使其拥有这些组件的所有功能。

装饰者模式的主要角色:

组件接口:组件接口是装饰者和被装饰者的超类或组件,它定义了装饰者的核心功能和被装饰者需要加强的功能。

具体组件:具体组件实现了核心功能,完成业务逻辑,他是被装饰对象。

装饰者:实现组件接口,并持有被装饰者对象。

具体装饰者:实现了完整的核心业务逻辑,组件相互叠加,形成一个功能强大的组件对象。

举例说明:

需要一个结果通过HTML发布,现在需要转换一个HTML文本,由于需要在网络上传输,所以需要一个HTTP头部,还要有TCP头部,实际内容三部分。实际内容为核心部分,两个头部为装饰部分。

具体代码实现:

//组件接口类
public  interface IPacketCreator{
	public String handleContent();
}

//PacketBodyCreator用于返回数据包核心数据
public calss PacketBodyCreator implements IPacketCreator{
	public String handleContent(){
		return "Content of Packet";
	}
}

//管理装饰者
public abstract calss PacketDecorator implements IPacketCreator{
	IPacketCreator component;
	public PacketDecorator(IPacketCreator c){
		component = c;
	}
}

//增加HTML格式化装饰者
public calss PacketHTMLHeaderCreator extends PacketDecorator{
	public PacketHTMLHeaderCreator(IPacketCreator c){
		super(c);
	}

	public String handleContent(){
		StringBuffer sb = new StringBuffer();
		sb.append("<html>");
		sb.append("<body>");
		sb.append(component.handleContent());	//把核心数据放入
		sb.append("</body>");
		sb.append("</html>");
		return sb.toString();
	}
}
//增加HTTP头部装饰者
public class PacketHTTPHeaderCreator extends PacketDecorator{
	public PacketHTTPHeaderCreator(IPacketCreator c){
		super(c);
	}

	public String handleContent(){
		StringBuffer sb = new StringBuffer();
		sb.append("Cache-Control:no-cache\n");
		sb.append("Date:mon,31Dec201225:25:57GMT\n");
		sb.append(component.handleContent());
		return sb.toString();
	}
}

//主函数
public static void main(String[] args) {
	IPacketCreator pc = new PacketHTTPHeaderCreator
					(new PacketHTMLHeaderCreator(new PacketBodyCreator()));
	System.out.printlm(pc.handleContent());
}

//系统输出如下
Cache-Control:no-cache
Date:mon,31Dec201225:25:57GMT
<html><body>Content of Packet</body></html>


在JDK中的OutputStream和InputStream类族都是装饰者模式实现的,OutputStream对象提供的方法比较简单,功能也比较弱,通过装饰者模式可以使其增强,比如加入缓冲组件,在去磁盘写入数据时,将数据先写入缓存中,当缓存满了,再实际写入数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值