【内含例子代码】Spring框架的设计模式应用(第二集) ...

打印 上一主题 下一主题

主题 1047|帖子 1047|积分 3141

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
接上一篇文章,如今继承讲一下Spring框架的设计模式应用

  4. 观察者模式 (Observer Pattern)

  描述:

  

  • 观察者模式界说了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当主题对象发生变革时,它的所有依赖者(观察者)都会收到通知并自动更新。

  Spring 中的应用:

  

  • 变乱机制: Spring 提供了变乱发布和监听机制,允许对象之间举行松耦合的通讯。

  • ApplicationEventPublisher: 用于发布变乱。

  • ApplicationListener: 用于监听变乱。

  示例:

  1. // 定义一个事件
  2. publicclass CustomEvent extends ApplicationEvent {
  3.     private String message;
  4.     public CustomEvent(Object source, String message) {
  5.         super(source);
  6.         this.message = message;
  7.     }
  8.     public String getMessage() {
  9.         return message;
  10.     }
  11. }
  12. // 发布事件
  13. @Service
  14. publicclass EventPublisherService implements ApplicationEventPublisherAware {
  15.     private ApplicationEventPublisher publisher;
  16.     @Override
  17.     public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
  18.         this.publisher = applicationEventPublisher;
  19.     }
  20.     public void publishCustomEvent(final String message) {
  21.         System.out.println("Publishing custom event. ");
  22.         CustomEvent customEvent = new CustomEvent(this, message);
  23.         publisher.publishEvent(customEvent);
  24.     }
  25. }
  26. // 监听事件
  27. @Component
  28. publicclass CustomEventListener implements ApplicationListener<CustomEvent> {
  29.     @Override
  30.     public void onApplicationEvent(CustomEvent event) {
  31.         System.out.println("Received custom event - " + event.getMessage());
  32.     }
  33. }
复制代码
5. 战略模式 (Strategy Pattern)

  描述:

  

  • 战略模式界说了一系列算法,并将每个算法封装起来,使它们可以互换。

  Spring 中的应用:

  

  • Routing DataSource: 在多数据源情况下,可以根据不同的条件选择不同的数据库毗连。

  • Transaction Management: 可以设置不同的事务管理器。

  示例:

  1. public interface PaymentStrategy {
  2.     void pay(int amount);
  3. }
  4. publicclass CreditCardPaymentStrategy implements PaymentStrategy {
  5.     @Override
  6.     public void pay(int amount) {
  7.         System.out.println("Paid with credit card: $" + amount);
  8.     }
  9. }
  10. publicclass PayPalPaymentStrategy implements PaymentStrategy {
  11.     @Override
  12.     public void pay(int amount) {
  13.         System.out.println("Paid with PayPal: $" + amount);
  14.     }
  15. }
  16. publicclass ShoppingCart {
  17.     private PaymentStrategy paymentStrategy;
  18.     public void setPaymentStrategy(PaymentStrategy paymentStrategy) {
  19.         this.paymentStrategy = paymentStrategy;
  20.     }
  21.     public void checkout(int amount) {
  22.         paymentStrategy.pay(amount);
  23.     }
  24. }
复制代码
6. 模板方法模式 (Template Method Pattern)

  描述:

  

  • 模板方法模式界说了一个算法的骨架,而将一些步骤延迟到子类中实现。

  Spring 中的应用:

  

  • JdbcTemplate: 提供了一个执行 SQL 查询的根本模板,具体的查询逻辑由子类或回调函数实现。

  • HibernateTemplate: 类似地,提供了与 Hibernate 交互的根本模板。

  示例:

  1. public abstractclass Game {
  2.     protected abstract void initialize();
  3.     protected abstract void startPlay();
  4.     protected abstract void endPlay();
  5.     // Template method
  6.     public final void play() {
  7.         // Initialize the game
  8.         initialize();
  9.         // Start the game
  10.         startPlay();
  11.         // End the game
  12.         endPlay();
  13.     }
  14. }
  15. publicclass Cricket extends Game {
  16.     @Override
  17.     protected void endPlay() {
  18.         System.out.println("Cricket Game Finished!");
  19.     }
  20.     @Override
  21.     protected void initialize() {
  22.         System.out.println("Cricket Game Initialized! Enjoy the game.");
  23.     }
  24.     @Override
  25.     protected void startPlay() {
  26.         System.out.println("Cricket Game Started. Enjoy the game!");
  27.     }
  28. }
复制代码
下集预告

  
下一篇文章将写上Spring框架继承介绍下面三种设计模式的应用:

  
7. 建造者模式 (Builder Pattern)

  
8. 装饰器模式 (Decorator Pattern)

  
9. 适配器模式 (Adapter Pattern)

  1. /// ***你们的关注是我一直写作的动力
  2. System.out.println("请添加我的绿色公主号:");
  3. System.out.println("Java知识日历");
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

络腮胡菲菲

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表