设计优化之装饰器

举报
西魏陶渊明 发表于 2022/09/25 04:58:32 2022/09/25
【摘要】 装饰器模式,是我们接触最多的一个设计模式,做web开发的时候,当浏览器提交内容时候,会被装饰为符合Http协议的然后进行,通信,我们的web容器就能识别,而服务端Request对象,才可以知道什么是Header,什么是Paramter参数。下面我们就模拟一个生成Html标签页面,来简单认识一下这个设计模式 重点: 装饰器模式是一种合...

装饰器模式,是我们接触最多的一个设计模式,做web开发的时候,当浏览器提交内容时候,会被装饰为符合Http协议的然后进行,通信,我们的web容器就能识别,而服务端Request对象,才可以知道什么是Header,什么是Paramter参数。下面我们就模拟一个生成Html标签页面,来简单认识一下这个设计模式

重点:

装饰器模式是一种合成/聚合复用原则,是一种委托,而不是继承关系,也就是说可以把这些功能组件,叠加,构建一个超级对象。

代码分析

  • 定义,每个实现的接口都能获取将要被装饰的内容

  
  1. /**
  2. * Created by mac on 2017/6/4.
  3. * 定义每个实现类,都可以返回的信息
  4. */
  5. public interface IPacketCreator {
  6. public String handlerContent();
  7. }
  • 抽象出,装饰器

  
  1. /**
  2. * Created by mac on 2017/6/4.
  3. * 装饰器
  4. * 每个实现装饰器的都可以获的,将要装饰的内容,comoponent,然后再次装饰
  5. */
  6. public abstract class PacketDecorator implements IPacketCreator{
  7. IPacketCreator component;
  8. public PacketDecorator (IPacketCreator component){
  9. this.component=component;
  10. }
  11. }
  • 构建正文

  
  1. public class PacketBobyCreator implements IPacketCreator {
  2. public String handlerContent() {
  3. return "Content of Packet[我是消息体]";
  4. }
  5. }
  • 构建<html>对象

  
  1. public class PacketHTMLHeaderCreator extends PacketDecorator {
  2. public PacketHTMLHeaderCreator(IPacketCreator creator) {
  3. super(creator);
  4. }
  5. public String handlerContent() {
  6. StringBuffer sb=new StringBuffer();
  7. sb.append("<html>");
  8. sb.append(component.handlerContent());
  9. sb.append("</html>");
  10. return sb.toString();
  11. }
  12. }

测试:


  
  1. /**
  2. * Created by mac on 2017/6/4.
  3. */
  4. public class Main {
  5. public static void main(String[] args) {
  6. IPacketCreator iPacketCreator=new PacketHTMLHeaderCreator(new PacketBobyCreator());
  7. System.out.println(iPacketCreator.handlerContent());
  8. }
  9. }
  10. //<html>Content of Packet[我是消息体]</html>

文章来源: springlearn.blog.csdn.net,作者:西魏陶渊明,版权归原作者所有,如需转载,请联系作者。

原文链接:springlearn.blog.csdn.net/article/details/102425297

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。