设计模式在Java项目中的实际应用

设计模式在Java项目中的实际应用

大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!

引言

设计模式是软件开发中重要的思想工具,它提供了解决特定问题的经验和模板。在Java项目中,合理应用设计模式可以提高代码的可维护性、扩展性和重用性。本文将深入探讨几种常见的设计模式,并通过实际案例展示它们在Java项目中的实际应用。

常见设计模式及其应用

1. 单例模式(Singleton Pattern)

单例模式保证一个类只有一个实例,并提供全局访问点。在需要全局共享资源或者避免重复创建对象时特别有用。

package cn.juwatech.singleton;public class SingletonExample {private static SingletonExample instance;private SingletonExample() {// 私有构造方法防止外部实例化}public static synchronized SingletonExample getInstance() {if (instance == null) {instance = new SingletonExample();}return instance;}public void performAction() {System.out.println("Performing action...");}
}
2. 工厂模式(Factory Pattern)

工厂模式通过定义一个创建对象的接口,但是由子类决定要实例化的类。它在需要根据条件创建不同实现的对象时非常有用。

package cn.juwatech.factory;public interface Shape {void draw();
}public class Circle implements Shape {@Overridepublic void draw() {System.out.println("Drawing Circle");}
}public class Rectangle implements Shape {@Overridepublic void draw() {System.out.println("Drawing Rectangle");}
}public class ShapeFactory {public Shape getShape(String shapeType) {if (shapeType == null) {return null;}if (shapeType.equalsIgnoreCase("CIRCLE")) {return new Circle();} else if (shapeType.equalsIgnoreCase("RECTANGLE")) {return new Rectangle();}return null;}
}
3. 观察者模式(Observer Pattern)

观察者模式定义了对象之间的一对多依赖关系,当一个对象状态发生变化时,其相关依赖对象都会得到通知并自动更新。

package cn.juwatech.observer;import java.util.ArrayList;
import java.util.List;public class Subject {private List<Observer> observers = new ArrayList<>();private int state;public int getState() {return state;}public void setState(int state) {this.state = state;notifyAllObservers();}public void attach(Observer observer) {observers.add(observer);}public void notifyAllObservers() {for (Observer observer : observers) {observer.update();}}
}public abstract class Observer {protected Subject subject;public abstract void update();
}public class BinaryObserver extends Observer {public BinaryObserver(Subject subject) {this.subject = subject;this.subject.attach(this);}@Overridepublic void update() {System.out.println("Binary String: " + Integer.toBinaryString(subject.getState()));}
}public class OctalObserver extends Observer {public OctalObserver(Subject subject) {this.subject = subject;this.subject.attach(this);}@Overridepublic void update() {System.out.println("Octal String: " + Integer.toOctalString(subject.getState()));}
}

实际应用案例

案例分析:使用工厂模式创建图形对象

假设一个图形绘制应用需要支持多种图形,可以通过工厂模式动态创建不同的图形对象:

public class ShapeApplication {public static void main(String[] args) {ShapeFactory shapeFactory = new ShapeFactory();Shape circle = shapeFactory.getShape("CIRCLE");circle.draw();Shape rectangle = shapeFactory.getShape("RECTANGLE");rectangle.draw();}
}
案例分析:使用观察者模式实现状态变化通知

在一个订单系统中,当订单状态改变时需要通知多个相关的观察者,比如发送邮件、更新库存等操作:

public class Order {private Subject subject = new Subject();public void placeOrder() {// 订单处理逻辑subject.setState(1); // 订单状态改变}// 其他订单操作方法
}public class ObserverPatternDemo {public static void main(String[] args) {Subject subject = new Subject();new BinaryObserver(subject);new OctalObserver(subject);System.out.println("First state change: 15");subject.setState(15);System.out.println("Second state change: 10");subject.setState(10);}
}

结论

设计模式在Java项目中不仅仅是理论,它们是实现高效、可扩展和可维护代码的关键。通过本文介绍的几种常见设计模式及其实际应用,希望能够帮助开发人员更好地理解和运用设计模式,提升项目的质量和开发效率。在实际项目中,选择合适的设计模式并灵活运用,将为项目的成功实施和后续维护奠定坚实的基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/38473.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习中的数学底蕴与设计模式

在说机器学习设计模式之前&#xff0c;想多说几句&#xff0c;在进入软件行业最初的10年&#xff0c;那时候耳熟能详的基本就是多线程编程&#xff0c;互斥同步锁&#xff0c;设计模式&#xff0c;OOA&#xff0c;OOP&#xff0c;常规数组&#xff0c;tree&#xff0c;图的数据…

体验升级:扫描全能王智能高清滤镜2.0全面测评

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

C++——STL容器用法汇总

0. 写在前面 每次用C刷题都不可避免要用到STL很多容器&#xff0c;而每个容器的函数名称会有细微的差异&#xff0c;为了更加快速找到容器函数的用法&#xff0c;建立实例代码是最快速的方式。希望能够帮到你~ 1. STL容器用法汇总 C——STL(序列容器) arrayvectordequelist…

【CT】LeetCode手撕—19. 删除链表的倒数第 N 个结点

题目 原题连接&#xff1a;19. 删除链表的倒数第 N 个结点 1- 思路 模式识别&#xff1a;删除倒数第 n 个结点 ——> 定义 dummyHead 并用双指针实现删除逻辑 2- 实现 ⭐19. 删除链表的倒数第 N 个结点——题解思路 class Solution {public ListNode removeNthFromEnd(Li…

React-Native优质开源项目

React Native 是一个由 Facebook 开发的开源框架&#xff0c;允许开发者使用 JavaScript 和 React 来构建原生移动应用。它允许开发者编写一次代码&#xff0c;然后可以在 iOS 和 Android 平台上运行&#xff0c;而无需为每个平台单独编写代码。以下是 React Native 的一些关键…

进程间通信之信号全面总结与实例解析

目录 第一章&#xff1a;C语言信号基础 1.1 信号概念 1.2 信号系统调用 1.3 信号集与信号处理 1.4 实战案例&#xff1a;信号控制程序执行 1.5 实战案例&#xff1a;信号实现进程间通信 第二章&#xff1a;C语言信号高级应用 2.1 信号与多线程 2.2 信号与实时操作系统 …

openai的其他文本补全模型

文章目录 其他文本补全模型Completion 端点的输入选项Completion 端点的输出格式成本和数据隐私除了GPT-3和GPT-3.5,OpenAI还提供了其他几个模型。这些模型所用的端点与GPT-4和 ChatGPT 所用的不同。尽管无论是在价格方面还是在性能方面,GPT-3.5 Turbo 模型通常都是最佳选择,…

每天一个数据分析题(三百九十六)- 回归分析

如果回归分析中存在多重共线性&#xff0c;下列说法错误的是&#xff08; &#xff09;。 A. 所求出的参数的含义将变得不合理 B. 不会影响模型的预测结果 C. 可用岭回归或Lasso回归降低多重共线性对回归结果的影响 D. 存在多重共线性的变量所求参数将有可能变得不显著 数据…

MySQL 高级SQL高级语句(二)

一.CREATE VIEW 视图 可以被当作是虚拟表或存储查询。 视图跟表格的不同是&#xff0c;表格中有实际储存数据记录&#xff0c;而视图是建立在表格之上的一个架构&#xff0c;它本身并不实际储存数据记录。 临时表在用户退出或同数据库的连接断开后就自动消失了&#xff0c;而…

LLM学习记录

概述 语言模型经历过四个阶段的发展&#xff0c;依次从统计语言模型到神经网络语言模型&#xff08;NLM&#xff09;&#xff0c;到出现以 BERT 和 Transformer 架构为代表的预训练语言模型&#xff08;PLM&#xff09;&#xff0c;最终到大型语言模型阶段&#xff08;LLM&…

Linux 下常用命令

Ubuntu 清空回收站 sudo rm -rf ~/.local/share/Trash/*在图形界面点清空很慢&#xff0c;文件多了会无响应 寻找文件 定位文件 locate filename更新数据库 sudo updatedb Atom 实时预览 Markdown 快捷键 CtrlShiftM菜单栏 Packages -> Markdown Preview -> Toggle P…

四十六、 医药行业跨境传输的常见场景有哪些?

在医药行业中&#xff0c;不论是有意于海外市场发展的中资企业&#xff0c;还是深耕中国市场的跨国企业&#xff0c;均广泛地涉及不同场景下的跨境数据传输。这些数据传输广泛存在于从研发到上市、商业化以及跨境许可交易等场景下。 在医药研发过程中&#xff0c;国际多中心临床…

数学建模比赛介绍与写作建议

0 小序 本文的写作起因是导师要求我给打算参加相关竞赛的师弟们做一次讲座和汇报。我梳理了一个ppt提纲&#xff0c;并经过整理&#xff0c;因此有了这篇文章。 我打算从数学建模论文写作格式和写作技巧入手&#xff0c;接着介绍数学建模常用的数学模型&#xff0c;最后提出一…

Ruby 环境变量

Ruby 环境变量 概述 环境变量在编程中扮演着重要的角色,尤其是在Ruby这样的动态编程语言中。它们是操作系统用来存储有关其操作环境的信息的变量,可以在程序运行时影响其行为。Ruby程序可以通过环境变量来获取配置信息、系统细节或用户特定的设置。本文将深入探讨Ruby中环境…

【数据结构(邓俊辉)学习笔记】二叉搜索树04——AVL树

文章目录 1.重平衡1.1 AVL BBST1.2 平衡因子1.3 适度平衡1.4 接口1.5 失衡 复衡 2. 插入2.1 单旋2.2 双旋2.3 实现 3. 删除3.1 单旋3.2 双旋3.3 实现 4. &#xff08;3 4&#xff09;-重构4.1 "34"重构4.2 "34"实现4.3 rotateAt4.4 综合评价 1.重平衡 1…

【Python】利用代理IP爬取当当网数据做数据分析

前言 在数字化浪潮的推动下&#xff0c;电商平台已经彻底改变了我们的购物方式。从简单的在线交易到复杂的用户交互&#xff0c;电商平台积累了海量的用户数据。这些数据&#xff0c;如同隐藏在深海中的宝藏&#xff0c;等待着被发掘和利用。通过分析用户的浏览、搜索、购买等行…

NGINX、HAProxy、AWS ELB、Google Cloud Load Balancer负载均衡器之间的优缺点

负载均衡器是分布式系统中非常重要的组件&#xff0c;用于分发网络流量以确保系统的高可用性和高性能。NGINX、HAProxy、AWS ELB 和 Google Cloud Load Balancer 是常见的负载均衡解决方案&#xff0c;它们各有优缺点&#xff0c;适用于不同的应用场景。以下是对这些负载均衡器…

冥想第一千二百零五天

1.今天周六带着溪溪去游泳&#xff0c;她是一点也不憋气吸气。给我气坏了&#xff0c;回来后。游泳圈忘了带了然后又返回&#xff0c;自由泳练习后回家&#xff0c;练习期间又趴在池边练腿&#xff0c;让后就导致了&#xff0c;晚上后半夜&#xff0c;疼醒的切腹疼痛。可能是练…

(4.2)Sourcegraph(Chrome插件)——github实现源码阅读

一、下载 下载方式参考&#xff1a;如何安装 Chrome 插件&#xff1f;以 Show_Rank 为例 下载链接一&#xff1a;从Chrome应用商店直接搜索&#xff0c;https://chromewebstore.google.com/detail/sourcegraph/dgjhfomjieaadpoljlnidmbgkdffpack?utm_sourceext_app_menu 如…

可燃气体报警器检测周期:企业安全管理体系中的关键环节

可燃气体报警器作为现代工业安全监测的重要工具&#xff0c;对于预防火灾、爆炸等安全事故起着至关重要的作用。 而检测周期的设置&#xff0c;直接关系到报警器的准确性和可靠性。 接下来&#xff0c;佰德将深入探讨可燃气体报警器检测周期的重要性&#xff0c;并通过案例分…