装饰器模式,是我们接触最多的一个设计模式,做web开发的时候,当浏览器提交内容时候,会被装饰为符合Http协议的然后进行,通信,我们的web容器就能识别,而服务端Request对象,才可以知道什么是Header,什么是Paramter参数。下面我们就模拟一个生成Html标签页面,来简单认识一下这个设计模式
重点:
装饰器模式是一种合成/聚合复用原则,是一种委托,而不是继承关系,也就是说可以把这些功能组件,叠加,构建一个超级对象。
代码分析
- 定义,每个实现的接口都能获取将要被装饰的内容
/**
* Created by mac on 2017/6/4.
* 定义每个实现类,都可以返回的信息
*/
public interface IPacketCreator {
public String handlerContent();
}
- 抽象出,装饰器
/**
* Created by mac on 2017/6/4.
* 装饰器
* 每个实现装饰器的都可以获的,将要装饰的内容,comoponent,然后再次装饰
*/
public abstract class PacketDecorator implements IPacketCreator{
IPacketCreator component;
public PacketDecorator (IPacketCreator component){
this.component=component;
}
}
- 构建正文
public class PacketBobyCreator implements IPacketCreator {
public String handlerContent() {
return "Content of Packet[我是消息体]";
}
}
- 构建<html>对象
public class PacketHTMLHeaderCreator extends PacketDecorator {
public PacketHTMLHeaderCreator(IPacketCreator creator) {
super(creator);
}
public String handlerContent() {
StringBuffer sb=new StringBuffer();
sb.append("<html>");
sb.append(component.handlerContent());
sb.append("</html>");
return sb.toString();
}
}
测试:
/**
* Created by mac on 2017/6/4.
*/
public class Main {
public static void main(String[] args) {
IPacketCreator iPacketCreator=new PacketHTMLHeaderCreator(new PacketBobyCreator());
System.out.println(iPacketCreator.handlerContent());
}
}
//<html>Content of Packet[我是消息体]</html>