设计模式-装饰者模式

定义

装饰者模式通过委托的方式,将对象的功能叠加,从而增强原有对象功能。

角色
角色作用
组件接口是装饰者或者被装饰者的超类或者接口,定义了被装饰者的核心功能和修饰者需要加强的方法
具体组件实现了组件接口的核心方法,完成业务逻辑,是被装饰的对象
装饰者实现组件接口,并持有具体的被装饰者对象
具体装饰者具体实现装饰的业务逻辑,各个具体装饰者是可以叠加的
类图

这里写图片描述

应用

假设要将某结果以HTML进行发布,那么首先需要将内容转化为HTML文本。同时,内容要通过HTTP传输,还需要为其添加HTTP头。

代码
/**
 * 装饰接口
 * @author wzx
 * @time 2018/5/27
 */
public interface IPacketCreator {
    String handlerContent();
}
/**
 * 具体组件
 * @author wzx
 * @time 2018/5/27
 */
public class PackeyBodyCreator implements IPacketCreator {
    @Override
    public String handlerContent() {
        return "Content of Packet";
    }
}
/**
 * 装饰者
 * @author wzx
 * @time 2018/5/27
 */
public abstract class PacketDecorator implements IPacketCreator {

    IPacketCreator packetCreator;

    public PacketDecorator(IPacketCreator packetCreator) {
        this.packetCreator = packetCreator;
    }

}
/**
 * @author wzx
 * @time 2018/5/27
 */
public class PacketHTMLHeaderCreator extends PacketDecorator {

    public PacketHTMLHeaderCreator(IPacketCreator packetCreator) {
        super(packetCreator);
    }

    @Override
    public String handlerContent() {
        String sb = "<html>" +
            "<body>" +
            packetCreator.handlerContent() +
            "</body>" +
            "</html>";
        return sb;
    }
}
/**
 * @author wzx
 * @time 2018/5/27
 */
public class PacketHTTPHeaderCreator extends PacketDecorator{

    public PacketHTTPHeaderCreator(IPacketCreator packetCreator) {
        super(packetCreator);
    }

    @Override
    public String handlerContent() {
        StringBuilder sb = new StringBuilder();
        sb.append("Cache-Control:no-cache");
        sb.append(packetCreator.handlerContent());
        return sb.toString();
    }
}
public class Main {
    public static void main(String[] args) {
        PacketHTTPHeaderCreator creator = new PacketHTTPHeaderCreator(new PacketHTMLHeaderCreator(
            new PackeyBodyCreator()
        ));
        System.out.println(creator.handlerContent());
    }
}
输出结果
Cache-Control:no-cache<html><body>Content of Packet</body></html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值