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

Java中的设计模式:实战案例分享

Java中的设计模式:实战案例分享

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

设计模式是软件开发中的宝贵工具,它们为常见的问题提供了经过验证的解决方案,帮助开发者编写出可维护、可扩展的代码。在Java编程中,设计模式更是发挥了重要作用。本文将分享几种常见的Java设计模式,并通过实战案例来展示它们的实际应用。

一、单例模式(Singleton Pattern)

1. 模式简介

单例模式确保一个类只有一个实例,并提供一个全局访问点。它常用于需要全局唯一实例的场景,如配置管理、日志记录等。

2. 实战案例

假设我们需要设计一个日志记录器,确保整个系统中只有一个日志记录器实例。

public class Logger {private static Logger instance;private Logger() {// 私有构造函数}public static Logger getInstance() {if (instance == null) {synchronized (Logger.class) {if (instance == null) {instance = new Logger();}}}return instance;}public void log(String message) {System.out.println(message);}
}public class Main {public static void main(String[] args) {Logger logger = Logger.getInstance();logger.log("This is a log message.");}
}

二、工厂模式(Factory Pattern)

1. 模式简介

工厂模式定义了一个创建对象的接口,但由子类决定实例化哪一个类。它通过延迟到子类来实现实例化,提供了对象创建的灵活性。

2. 实战案例

假设我们需要设计一个形状工厂,根据不同的参数生成不同的形状对象。

// 定义形状接口
interface Shape {void draw();
}// 实现具体的形状类
class Circle implements Shape {public void draw() {System.out.println("Drawing a Circle");}
}class Square implements Shape {public void draw() {System.out.println("Drawing a Square");}
}// 创建形状工厂
class ShapeFactory {public Shape getShape(String shapeType) {if (shapeType == null) {return null;}if (shapeType.equalsIgnoreCase("CIRCLE")) {return new Circle();} else if (shapeType.equalsIgnoreCase("SQUARE")) {return new Square();}return null;}
}// 使用工厂生成对象
public class Main {public static void main(String[] args) {ShapeFactory shapeFactory = new ShapeFactory();Shape shape1 = shapeFactory.getShape("CIRCLE");shape1.draw();Shape shape2 = shapeFactory.getShape("SQUARE");shape2.draw();}
}

三、观察者模式(Observer Pattern)

1. 模式简介

观察者模式定义了对象间的一对多依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都会收到通知并自动更新。该模式常用于事件处理系统中。

2. 实战案例

假设我们设计一个新闻发布系统,当有新新闻发布时,所有订阅者都会收到通知。

import java.util.ArrayList;
import java.util.List;// 定义观察者接口
interface Observer {void update(String message);
}// 实现具体的观察者
class Subscriber implements Observer {private String name;public Subscriber(String name) {this.name = name;}@Overridepublic void update(String message) {System.out.println(name + " received: " + message);}
}// 定义被观察者接口
interface Subject {void attach(Observer observer);void detach(Observer observer);void notifyObservers();
}// 实现具体的被观察者
class NewsPublisher implements Subject {private List<Observer> observers = new ArrayList<>();private String news;public void setNews(String news) {this.news = news;notifyObservers();}@Overridepublic void attach(Observer observer) {observers.add(observer);}@Overridepublic void detach(Observer observer) {observers.remove(observer);}@Overridepublic void notifyObservers() {for (Observer observer : observers) {observer.update(news);}}
}// 使用观察者模式
public class Main {public static void main(String[] args) {NewsPublisher publisher = new NewsPublisher();Subscriber subscriber1 = new Subscriber("Alice");Subscriber subscriber2 = new Subscriber("Bob");publisher.attach(subscriber1);publisher.attach(subscriber2);publisher.setNews("Breaking News: Java Design Patterns are awesome!");publisher.detach(subscriber1);publisher.setNews("Update: Observer Pattern in action!");}
}

四、策略模式(Strategy Pattern)

1. 模式简介

策略模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换。策略模式使得算法可以独立于使用它的客户端变化。

2. 实战案例

假设我们设计一个支付系统,可以根据不同的支付方式(如信用卡、PayPal)来执行支付操作。

// 定义支付策略接口
interface PaymentStrategy {void pay(int amount);
}// 实现具体的支付策略
class CreditCardPayment implements PaymentStrategy {@Overridepublic void pay(int amount) {System.out.println("Paid " + amount + " using Credit Card");}
}class PayPalPayment implements PaymentStrategy {@Overridepublic void pay(int amount) {System.out.println("Paid " + amount + " using PayPal");}
}// 创建上下文使用策略
class ShoppingCart {private PaymentStrategy paymentStrategy;public void setPaymentStrategy(PaymentStrategy paymentStrategy) {this.paymentStrategy = paymentStrategy;}public void checkout(int amount) {paymentStrategy.pay(amount);}
}// 使用策略模式
public class Main {public static void main(String[] args) {ShoppingCart cart = new ShoppingCart();cart.setPaymentStrategy(new CreditCardPayment());cart.checkout(100);cart.setPaymentStrategy(new PayPalPayment());cart.checkout(200);}
}

五、总结

设计模式为软件开发提供了一套最佳实践,帮助开发者编写出高质量、易维护的代码。本文分享了单例模式、工厂模式、观察者模式和策略模式的实战案例,展示了这些模式在实际项目中的应用。掌握并正确应用设计模式,可以大大提高开发效率和代码质量。

感谢大家的阅读,如果您有任何疑问或建议,欢迎留言讨论!

相关文章:

  • labelme使用笔记:目标检测数据集标注和语义分割数据集批量生成
  • kafka第二篇——主题创建,主题分区副本分配策略
  • PWR电源控制
  • IDEA services模块无法启动springboot服务(添加了springboot但是为空白)
  • HTTP/2 的 ALPN(应用层协议协商)
  • 【前端】Git 常用
  • C语言| 宏定义
  • Python 学习 第四册 第10章 系统(2)
  • OpenCV图像变换
  • React的State和setState
  • Flink——最流批的大数据框架(流批一体)
  • 【Unity学习笔记】第十八 基于物理引擎的日月地系统简单实现
  • java智慧工地系统源码 智慧工地标准之一:环境监测 告别灰头土脸、智慧工地环境监测系统都包括哪些功能?
  • ThinkPHP6图书借阅管理系统
  • 基于uni-app和图鸟UI的智慧农业综合管控平台小程序技术实践
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • DOM的那些事
  • egg(89)--egg之redis的发布和订阅
  • java中的hashCode
  • Kibana配置logstash,报表一体化
  • Spring核心 Bean的高级装配
  • Zsh 开发指南(第十四篇 文件读写)
  • 动态规划入门(以爬楼梯为例)
  • 删除表内多余的重复数据
  • 树莓派 - 使用须知
  • 一道闭包题引发的思考
  • MyCAT水平分库
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #AngularJS#$sce.trustAsResourceUrl
  • (11)MSP430F5529 定时器B
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (分类)KNN算法- 参数调优
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (三十五)大数据实战——Superset可视化平台搭建
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (一)认识微服务
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)创业的注意事项
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .config、Kconfig、***_defconfig之间的关系和工作原理
  • .net core 依赖注入的基本用发
  • .Net Core缓存组件(MemoryCache)源码解析
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .NET 通过系统影子账户实现权限维持
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • .net开发引用程序集提示没有强名称的解决办法