设计优化之装饰器

装饰器模式,是我们接触最多的一个设计模式,做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>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,269评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,650评论 25 709
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,872评论 18 399
  • 导读:不管是小白去面试一家新的公司,还是朋友问起你对某家公司有什么了解?你怎么回答?甚至很常见的情况是,你的老板让...
    一年没吃过肉阅读 299评论 0 4
  • elasticsearch更新到5.x版本后,都需要用JDK8。本来是件忒简单的事情,但是放在VPS上就有点懵了。...
    小木胆阅读 4,975评论 0 0