官网地址

程序猿升级课

热爱开源,喜欢摸索


设计优化之装饰器

装饰器模式,是我们接触最多的一个设计模式,做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>
posted @ 2017-06-04 15:29  chinesszz  阅读(80)  评论(0编辑  收藏  举报
ヾ(≧O≦)〃嗷~