装饰者模式/包装模式是指在不改变原有对象基础上,将功能附加到对象上。提供了比继承更有弹性的替代方案。
装饰者模型核心是不改动原先业务内容,但又给原来业务增加额外职责东西。
装饰者模式框架图:
原先主业务接口以及实现类
修饰者基类 implements InterfaceComponent
修饰者具体实现类
现有如下业务需求:
原有业务逻辑对数据进行处理;后续随着业务拓展,需要对原来业务新增数据发送监控功能以及error日志存储功能。基本设计思路是可以在原来业务类中新增这两个方法,可是这两个方法只是配合监控的非核心逻辑,所以这里可以采用装饰着模式在不改动核心业务逻辑前提下新建这两个方法
Business Interface: public interface IDataProcess { void dataProcess(); } Business Service: public class DataProcess implements IDataProcess{ @Override public void dataProcess() { System.out.println("this is main business process"); } } BaseDecorate public class BaseDecorate implements IDataProcess{ IDataProcess dataProcess; public BaseDecorate(IDataProcess dataProcess){ this.dataProcess=dataProcess; } @Override public void dataProcess() { dataProcess.dataProcess(); System.out.println("this is base Decorate"); } } SendMessageDecorate public class SendMessageDecorate extends BaseDecorate{ public SendMessageDecorate(IDataProcess dataProcess) { super(dataProcess); } @Override public void dataProcess(){ super.dataProcess(); sendMonitorMessage(); } private void sendMonitorMessage(){ System.out.println("this is sendMessageDecorate logic that using to send monitor message"); } } ErrorLogStoreDecorate public class LogStoredDecorate extends BaseDecorate { public LogStoredDecorate(IDataProcess dataProcess) { super(dataProcess); } @Override public void dataProcess(){ super.dataProcess(); storedLog(); } private void storedLog(){ System.out.println("this is logStore logic that using to store message"); } } Controller: @RestController @RequestMapping public class DecorateController { @Autowired private IDataProcess dataProcess; @RequestMapping("decorate") public void SendMessageDecorate(){ BaseDecorate baseDecorate=new BaseDecorate(dataProcess); //基本包装类 baseDecorate.dataProcess(); } @RequestMapping("decorate1") public void decorateTest1(){ SendMessageDecorate sendMessageDecorate=new SendMessageDecorate(dataProcess); //基本包装类基础上增加发邮件 sendMessageDecorate.dataProcess(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?