Java 设计者模式以及与Spring关系(五) 策略和观察者模式

2024-01-23 00:44

本文主要是介绍Java 设计者模式以及与Spring关系(五) 策略和观察者模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

简介:

23设计者模式以及重点模式

策略模式(Strategy Pattern)

示例

spring中应用

观察者模式(Observer)

示例

spring中应用


简介:

本文是个系列一次会出两个设计者模式作用,如果有关联就三个,除此外还会讲解在spring中作用。

23设计者模式以及重点模式

我们都知道设计者模式323种设计模式,标红是特别重要的设计者模式建议都会,而且熟读于心,标蓝是指其次重要建议也要明白。

(1)创建型模式:单例模式抽象工厂模式构建者模式工厂模式原型模式

(2)结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式

(3)行为型模式:访问者模式、模版方法模式命令模式、迭代器模式观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式。

策略模式(Strategy Pattern)

策略模式允许在运行时选择最适合的算法或行为。它定义了一系列算法,并将每个算法封装到具有共同接口的独立的类中。这种模式允许算法的互换使用,使得算法可以独立于使用它们的客户端变化。

说白了可以根据你的参数选择要走的具体实现类

示例
// 策略接口
interface SortingStrategy {void sort(int[] array);
}// 具体策略类:冒泡排序
class BubbleSortStrategy implements SortingStrategy {public void sort(int[] array) {System.out.println("Sorting using bubble sort");// 这里可以添加冒泡排序的实现}
}// 具体策略类:选择排序
class SelectionSortStrategy implements SortingStrategy {public void sort(int[] array) {System.out.println("Sorting using selection sort");// 这里可以添加选择排序的实现}
}// 上下文类
class SortedArray {private SortingStrategy strategy;public SortedArray(SortingStrategy strategy) {this.strategy = strategy;}public void setStrategy(SortingStrategy strategy) {this.strategy = strategy;}public void sortArray(int[] array) {strategy.sort(array);}
}// 测试类
public class StrategyPatternDemo {public static void main(String[] args) {int[] array = { 1, 5, 3, 2, 4 };SortedArray context = new SortedArray(new BubbleSortStrategy());context.sortArray(array);context.setStrategy(new SelectionSortStrategy());context.sortArray(array);}
}

spring中应用

策略模式在 Spring 中也很常见,例如资源管理和权限验证等多种不同实现可以互换使用。

观察者模式(Observer)

        观察者模式是一种行为型设计模式,它定义了对象间的一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这种模式通常用于实现分布式事件处理系统,其中一个对象的状态发生改变会自动通知所有依赖于它的对象。

示例
import java.util.ArrayList;
import java.util.List;// 主题接口
interface Subject {void attach(Observer o);void detach(Observer o);void notifyUpdate(Message m);
}// 观察者接口
interface Observer {void update(Message m);
}// 具体主题
class ConcreteSubject implements Subject {private List<Observer> observers = new ArrayList<>();public void attach(Observer o) {observers.add(o);}public void detach(Observer o) {observers.remove(o);}public void notifyUpdate(Message m) {for(Observer o: observers) {o.update(m);}}
}// 具体观察者
class ConcreteObserver implements Observer {public void update(Message m) {System.out.println("Received message: " + m.getMessageContent());}
}// 消息类
class Message {private String messageContent;public Message(String m) {this.messageContent = m;}public String getMessageContent() {return messageContent;}
}// 测试类
public class ObserverPatternDemo {public static void main(String[] args) {ConcreteSubject subject = new ConcreteSubject();Observer observer1 = new ConcreteObserver();Observer observer2 = new ConcreteObserver();subject.attach(observer1);subject.attach(observer2);subject.notifyUpdate(new Message("First Message"));  // Both observers will receive the updatesubject.detach(observer1);subject.notifyUpdate(new Message("Second Message")); // Only the second observer will receive the update}
}

        在这个示例中,ConcreteSubject 是一个具体的主题,它维护一个观察者列表并通知它们状态的变化。ConcreteObserver 是一个具体的观察者,定义了当接收到主题通知时如何响应。Message 类代表了一个消息或状态的更新。

spring中应用

观察者模式是实现事件驱动编程的关键模式之一。它使得主题和观察者之间的耦合度降低,增加了代码的灵活性和重用性。此外,它是实现MVC(Model-View-Controller)架构模式中的模型(Model)和视图(View)之间交互的关键。

------------------------------------------与正文内容无关------------------------------------
如果觉的文章写对各位读者老爷们有帮助的话,麻烦点赞加关注呗!作者在这拜谢了!

混口饭吃了!如果你需要Java 、Python毕设、网页和系统设计,还有你是刚入职的新手需要度过试用期。请在关注私信我,本人看到一定马上回复!

这篇关于Java 设计者模式以及与Spring关系(五) 策略和观察者模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/634745

相关文章

Java Predicate接口定义详解

《JavaPredicate接口定义详解》Predicate是Java中的一个函数式接口,它代表一个判断逻辑,接收一个输入参数,返回一个布尔值,:本文主要介绍JavaPredicate接口的定义... 目录Java Predicate接口Java lamda表达式 Predicate<T>、BiFuncti

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Spring Security方法级安全控制@PreAuthorize注解的灵活运用小结

《SpringSecurity方法级安全控制@PreAuthorize注解的灵活运用小结》本文将带着大家讲解@PreAuthorize注解的核心原理、SpEL表达式机制,并通过的示例代码演示如... 目录1. 前言2. @PreAuthorize 注解简介3. @PreAuthorize 核心原理解析拦截与

一文详解JavaScript中的fetch方法

《一文详解JavaScript中的fetch方法》fetch函数是一个用于在JavaScript中执行HTTP请求的现代API,它提供了一种更简洁、更强大的方式来处理网络请求,:本文主要介绍Jav... 目录前言什么是 fetch 方法基本语法简单的 GET 请求示例代码解释发送 POST 请求示例代码解释

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

Java利用docx4j+Freemarker生成word文档

《Java利用docx4j+Freemarker生成word文档》这篇文章主要为大家详细介绍了Java如何利用docx4j+Freemarker生成word文档,文中的示例代码讲解详细,感兴趣的小伙伴... 目录技术方案maven依赖创建模板文件实现代码技术方案Java 1.8 + docx4j + Fr

SpringBoot首笔交易慢问题排查与优化方案

《SpringBoot首笔交易慢问题排查与优化方案》在我们的微服务项目中,遇到这样的问题:应用启动后,第一笔交易响应耗时高达4、5秒,而后续请求均能在毫秒级完成,这不仅触发监控告警,也极大影响了用户体... 目录问题背景排查步骤1. 日志分析2. 性能工具定位优化方案:提前预热各种资源1. Flowable

基于SpringBoot+Mybatis实现Mysql分表

《基于SpringBoot+Mybatis实现Mysql分表》这篇文章主要为大家详细介绍了基于SpringBoot+Mybatis实现Mysql分表的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录基本思路定义注解创建ThreadLocal创建拦截器业务处理基本思路1.根据创建时间字段按年进