网站建设的不足,国内十大游戏公司排名,溧阳建设集团网站,wordpress 获取附件链接前言
现在我们有个如下的需求#xff0c;设计一个邮件发奖的小系统#xff0c;
需求
1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式#xff08;Decorator Pattern#xff09;允许向一个现有的对象添加新的功能#xff0c;同时又不改变其…前言
现在我们有个如下的需求设计一个邮件发奖的小系统
需求
1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式Decorator Pattern允许向一个现有的对象添加新的功能同时又不改变其结构。这种类型的设计模式属于结构型模式它是作为现有的类的一个包装。 1. 定义核心接口
// 1. 定义核心接口
interface RewardHandler {void handleReward(Reward reward);
}2. 基础实现类
// 2. 基础实现类
class BasicRewardHandler implements RewardHandler {Overridepublic void handleReward(Reward reward) {// 实际发送邮件的核心逻辑sendEmail(reward);}private void sendEmail(Reward reward) {System.out.println(发送邮件奖励 reward.getAmount() 个 reward.getType());}
}3. 装饰器抽象类
// 3. 装饰器抽象类
abstract class RewardDecorator implements RewardHandler {private RewardHandler wrappee;public RewardDecorator(RewardHandler wrappee) {this.wrappee wrappee;}Overridepublic void handleReward(Reward reward) {wrappee.handleReward(reward);}
}4. 具体装饰器实现可组合使用
// 4. 具体装饰器实现可组合使用
class ValidationDecorator extends RewardDecorator {public ValidationDecorator(RewardHandler wrappee) {super(wrappee);}Overridepublic void handleReward(Reward reward) {if (validate(reward)) {super.handleReward(reward);}}private boolean validate(Reward reward) {System.out.println(验证奖励有效性: reward.getId());return reward.getAmount() 0;}
}class LoggingDecorator extends RewardDecorator {public LoggingDecorator(RewardHandler wrappee) {super(wrappee);}Overridepublic void handleReward(Reward reward) {System.out.println([LOG] 开始处理奖励 reward.getId());super.handleReward(reward);System.out.println([LOG] 奖励处理完成 reward.getId());}
}class EncryptionDecorator extends RewardDecorator {public EncryptionDecorator(RewardHandler wrappee) {super(wrappee);}Overridepublic void handleReward(Reward reward) {Reward encryptedReward encrypt(reward);super.handleReward(encryptedReward);}private Reward encrypt(Reward reward) {System.out.println(加密奖励数据: reward.getId());return new Reward(reward.getId(), reward.getType(), reward.getAmount(), AES.encrypt(reward.getData()));}
}5. 使用示例
// 5. 使用示例
public class Main {public static void main(String[] args) {// 组合装饰器验证 - 日志 - 加密 - 核心处理RewardHandler handler new LoggingDecorator(new EncryptionDecorator(new ValidationDecorator(new BasicRewardHandler())));Reward reward new Reward(20230605-001, 金币, 100);handler.handleReward(reward);}
}关键设计点说明
灵活扩展性通过装饰器链式组合如验证→加密→日志可动态调整处理流程单一职责原则每个装饰器只关注单一功能验证、加密、日志等开闭原则新增处理逻辑时无需修改已有代码运行时组合可根据不同环境配置装饰器组合生产环境加验证测试环境不加加密
典型处理流程
1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件
扩展建议
可添加RateLimitDecorator实现发放频率控制增加 FormatDecorator 处理奖励数据的格式化使用CircuitBreakerDecorator实现熔断机制通过配置中心动态调整装饰器组合顺序
这种模式特别适合需要动态组合多种预处理/后处理逻辑的场景比继承方式更灵活比责任链模式更易控制流程顺序。