当前位置: 首页 > news >正文

浅学Java-设计模式

1. 单例模式(Singleton)

// Spring Bean 默认就是单例
@Service
public class UserService {// 整个应用只有一个 UserService 实例
}

2. 工厂模式(Factory)

// 策略管理器就是工厂模式的应用
@Component
public class SmsStrategy {private Map<String, SmsService> SMS_SERVICES;// 根据类型获取对应的实例public SmsService getService(String channel) {return SMS_SERVICES.get(channel);}
}

3. 策略模式(Strategy)

// 定义策略接口
interface SmsService {void send(String mobile, String code);
}// 实现策略
class AliyunSmsService implements SmsService { }
class TencentSmsService implements SmsService { }// 策略管理器
class SmsStrategy {public void send(String channel, String mobile, String code) {SmsService service = getService(channel);service.send(mobile, code);}
}

4.模板方法模式(Template Method)

// AbstractListener 是模板方法模式
public abstract class AbstractListener<T> {// 模板方法(定义流程)public void consumerMsg(Message msg, Channel channel) {T data = resolverMsg(msg);        // 子类实现String key = getUniqueKey(data);  // 子类实现try {consumer(data);  // 子类实现channel.basicAck(deliveryTag, true);} catch (Exception e) {handleException(e);  // 统一异常处理}}// 抽象方法(子类必须实现)protected abstract T resolverMsg(Message msg);protected abstract String getUniqueKey(T data);protected abstract void consumer(T data);
}// 具体实现
public class PayslipNoticeListener extends AbstractListener<PayslipNoticeDto> {@Overrideprotected PayslipNoticeDto resolverMsg(Message msg) {// 解析消息}@Overrideprotected String getUniqueKey(PayslipNoticeDto data) {return "payslip:" + data.getSn();}@Overrideprotected void consumer(PayslipNoticeDto data) {// 发送工资条通知}
}

5.建造者模式(Builder)

// Lombok @Builder 注解
@Data
@Builder
public class UserTokenDTO {private Integer userId;private String token;private String userName;
}// 使用
UserTokenDTO dto = UserTokenDTO.builder().userId(123).token("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...").userName("张三").build();

6.代理模式(Proxy)

// Feign 客户端就是代理模式
@FeignClient(url = "http://localhost:8082")
public interface PayrollClient {@GetMapping("/payroll/{id}")Payroll getById(@PathVariable Long id);
}// Spring 生成代理对象,拦截方法调用,发送 HTTP 请求

7.观察者模式(Observer)

// Spring 事件机制
@Component
public class UserEventListener {// 监听用户注册事件@EventListenerpublic void onUserRegister(UserRegisterEvent event) {log.info("用户注册事件: userId={}", event.getUserId());// 发送欢迎邮件// 发放新人优惠券}
}// 发布事件
@Service
public class UserService {@Autowiredprivate ApplicationEventPublisher publisher;public void register(User user) {// 保存用户userDao.save(user);// 发布事件publisher.publishEvent(new UserRegisterEvent(user.getId()));}
}

8.责任链模式(Chain of Responsibility)

// 拦截器链就是责任链模式
请求↓
拦截器1(认证)↓
拦截器2(权限)↓
拦截器3(日志)↓
Controller
http://www.dtcms.com/a/573812.html

相关文章:

  • Java Vector集合全面解析:线程安全的动态数组
  • FIB为什么要用液态镓来做离子源?
  • zabbix深度监控之邮件告警、微信群和微信告警
  • h5手机网站建设网页制作开版费
  • 企业做网站需要多少钱江西省住房建设厅统计网站
  • 游戏登录接口被爆破?从限流到 AI 防护的完整防御方案
  • 【训练技巧】优化器adam和adamw的公式推导详解及区别
  • 网易云网站开发网页开发的基本过程
  • 网站建设实训报告作业惠民网站建设
  • 上海华亮建设集团网站河南省城乡与住房建设厅网站首页
  • 【计算机视觉目标检测算法对比:R-CNN、YOLO与SSD全面解析】
  • 如何判断一个需求是“必须做”还是“可以等”?
  • 网站的主机做网站有发展吗
  • 力扣.84柱状图中最大矩形 力扣.134加油站牛客.abb(hard 动态规划+哈希表)牛客.哈夫曼编码
  • Verilog宏define
  • 性能瓶颈如何识别定位
  • ubuntu24.04制作离线本地APT源
  • UDS诊断服务基础详解之十四—85服务
  • 神经符号模型与增量学习——下一代可控人工智能的正统新范式
  • 企业官方网站开发如何入账做交通分析的网站
  • 如何使用爱站网婚庆网站建设公司
  • 高职大数据技术专业学习与发展指南
  • 上海网站建设的网站crm客户关系管理论文
  • C++的时间陷阱——临时对象、引用折叠与生命周期延长
  • 关于unity世界坐标和相对坐标
  • 企业网站建设研究凡科互动永久解封
  • 专做排名的网站做漫画网站
  • 数据库 连接工具 免费
  • 魔云手机建站商务网站规划建设与管理答案
  • django中request.GET.urlencode的使用