【Java 基础】-- 设计模式

目录

Java 设计模式详解

1. 设计模式定义

2. 设计模式示例

2.1 单例模式(Singleton Pattern)

2.2 工厂模式(Factory Pattern)

2.3 观察者模式(Observer Pattern)

2.4 代理模式(Proxy Pattern)

2.5 适配器模式(Adapter Pattern)

3. 设计模式的应用场景

4. 设计模式的注意事项

结语

Java 设计模式详解

1. 设计模式定义

设计模式(Design Patterns)是一套被软件开发行业广泛认可的最佳实践,用于解决常见的软件设计问题。它们是经验的总结,能够提高代码的可维护性、可复用性和可扩展性。

设计模式通常分为三大类:

  • 创建型模式(Creational Patterns):处理对象的创建问题。
  • 结构型模式(Structural Patterns):关注对象的组成结构。
  • 行为型模式(Behavioral Patterns):关注对象间的交互和职责划分。

2. 设计模式示例

2.1 单例模式(Singleton Pattern)

定义:单例模式保证一个类仅有一个实例,并提供一个全局访问点。

示例(懒汉式,线程安全):

public class Singleton {private static volatile Singleton instance;private Singleton() {}public static Singleton getInstance() {if (instance == null) {synchronized (Singleton.class) {if (instance == null) {instance = new Singleton();}}}return instance;}
}

使用场景

  • 需要全局唯一实例,如线程池、数据库连接池、缓存管理。

注意事项

  • 需要防止反射和序列化破坏单例。

2.2 工厂模式(Factory Pattern)

定义:提供一个创建对象的接口,而不指定具体类。

示例

interface Product {void create();
}
class ProductA implements Product {public void create() { System.out.println("Product A created"); }
}
class ProductB implements Product {public void create() { System.out.println("Product B created"); }
}
class Factory {public static Product getProduct(String type) {if ("A".equals(type)) return new ProductA();if ("B".equals(type)) return new ProductB();return null;}
}

使用场景

  • 需要创建复杂对象,但不想直接使用 new 关键字。

注意事项

  • 简单工厂模式容易违反开闭原则,建议结合工厂方法模式使用。

2.3 观察者模式(Observer Pattern)

定义:定义对象间的一对多依赖关系,当一个对象状态改变时,所有依赖者都会收到通知。

示例

import java.util.ArrayList;
import java.util.List;interface Observer {void update(String message);
}class ConcreteObserver implements Observer {private String name;public ConcreteObserver(String name) { this.name = name; }public void update(String message) {System.out.println(name + " received: " + message);}
}class Subject {private List<Observer> observers = new ArrayList<>();public void addObserver(Observer observer) { observers.add(observer); }public void notifyObservers(String message) {for (Observer observer : observers) {observer.update(message);}}
}public class ObserverPatternDemo {public static void main(String[] args) {Subject subject = new Subject();Observer o1 = new ConcreteObserver("Observer 1");Observer o2 = new ConcreteObserver("Observer 2");subject.addObserver(o1);subject.addObserver(o2);subject.notifyObservers("Update received!");}
}

使用场景

  • 事件监听机制,如 GUI 组件、消息推送。

注意事项

  • 防止循环依赖,注意性能问题。

2.4 代理模式(Proxy Pattern)

定义:代理模式为某个对象提供一个替代访问方式,控制对对象的访问。

示例

interface Service {void request();
}
class RealService implements Service {public void request() {System.out.println("Real service is processing request.");}
}
class ProxyService implements Service {private RealService realService;public void request() {if (realService == null) {realService = new RealService();}System.out.println("Proxy controlling access to real service.");realService.request();}
}

使用场景

  • 远程代理、虚拟代理、权限控制。

注意事项

  • 可能增加额外的复杂度和性能开销。

2.5 适配器模式(Adapter Pattern)

定义:适配器模式用于将一个接口转换为客户期望的另一个接口。

示例

interface Target {void request();
}
class Adaptee {void specificRequest() {System.out.println("Adaptee-specific request");}
}
class Adapter implements Target {private Adaptee adaptee = new Adaptee();public void request() {adaptee.specificRequest();}
}

使用场景

  • 需要让旧系统兼容新接口。

注意事项

  • 可能引入额外的复杂性。

3. 设计模式的应用场景

设计模式典型使用场景
单例模式配置管理、线程池、日志管理
工厂模式数据库连接、日志记录、解析器
观察者模式消息订阅、事件驱动系统
代理模式动态代理、权限管理
适配器模式兼容不同的 API 接口
策略模式订单支付方式选择、排序算法
装饰器模式运行时动态增加功能,如 I/O 流

4. 设计模式的注意事项

  • 选择合适的模式:不要盲目使用设计模式,确保它真正解决问题。
  • 避免过度设计:不必要的设计模式会增加代码复杂性。
  • 结合 SOLID 原则:确保代码的可维护性和可扩展性。
  • 关注性能:某些模式(如观察者模式)可能带来额外的性能开销。
  • 遵循开闭原则:尽量让代码对扩展开放,对修改封闭。

结语

Java 设计模式是提升代码质量的有力工具。掌握这些模式,可以在开发中编写出更加优雅、可维护的代码。建议通过实践不断加深理解,灵活运用设计模式解决实际问题!

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

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

相关文章

GitHub获取token

获取token clone代码 git clone https://$tokengithub.com/*****/*****.git

公司网络安全组织结构

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 第17章 网络安全应急响应技术原理与应用 17.1 网络安全应急响应概述 居安思危&#xff0c;思则有备&#xff0c;有备无患。网络安全应急响应是针对潜在发生的网络…

《深度学习进阶》第7集:深度实战 通过训练一个智能体玩游戏 来洞察 强化学习(RL)与决策系统

深度学习进阶 | 第7集&#xff1a;深度实战 通过训练一个智能体玩游戏 来洞察 强化学习&#xff08;RL&#xff09;与决策系统 在深度学习的广阔领域中&#xff0c;强化学习&#xff08;Reinforcement Learning, RL&#xff09;是一种独特的范式&#xff0c;它通过智能体与环境…

【web前端开发】CSS--CSS简介及其编写位置(上)

1、CSS简介 &#xff08;1&#xff09;CSS的全称为&#xff1a;层叠式样式表&#xff08;Cascading Style Sheets&#xff09; &#xff08;2&#xff09;CSS也是一种标记语言&#xff0c;用于给HTML结构设置样式&#xff0c;例如&#xff1a;文字大小、颜色、元素宽度等等…

计算机视觉|Swin Transformer:视觉 Transformer 的新方向

一、引言 在计算机视觉领域的发展历程中&#xff0c;卷积神经网络&#xff08;CNN&#xff09; 长期占据主导地位。从早期的 LeNet 到后来的 AlexNet、VGGNet、ResNet 等&#xff0c;CNN 在图像分类、目标检测、语义分割等任务中取得了显著成果。然而&#xff0c;CNN 在捕捉全…

UE4 组件 (对话组件)

制作一个可以生成对话气泡&#xff0c;显示对话台词的简单组件。这个组件要的变量&#xff1a;台词&#xff08;外部传入&#xff09;。功能&#xff1a;开始对话&#xff08;生成气泡UI&#xff09; &#xff0c;结束对话。 一、对话组件创建 二、开始对话事件 1、注意这里获…

WPF高级 | WPF 应用程序部署与发布:确保顺利交付到用户手中

WPF高级 | WPF 应用程序部署与发布&#xff1a;确保顺利交付到用户手中 一、前言二、部署与发布基础概念2.1 部署的定义与目的2.2 发布的方式与渠道2.3 部署与发布的关键要素 三、WPF 应用程序打包3.1 使用 Visual Studio 自带的打包工具3.2 使用第三方打包工具 四、发布到不同…

Vue3自定义hooks

Vue3自定义hooks 什么是自定义hooks 把一个功能的所有数据和方法写到同一个ts文件里。 命名规范&#xff1a;useXxx&#xff0c;小驼峰。 在每一个hooks中&#xff0c;都可以写onMounted、computed等属性&#xff0c;互不干扰。 体现出了组合式AI的优势&#xff0c;一个功能的…

Win7重装不翻车!ISO镜像安全下载渠道+BIOS设置避雷手册

一、写在前面&#xff1a;为什么你需要这份教程&#xff1f; 当电脑频繁蓝屏、系统崩溃甚至无法开机时&#xff0c;重装系统可能是最后的救命稻草。但市面上的教程往往存在三大痛点&#xff1a; ⚠️ 镜像来源不明导致系统被植入后门 ⚠️ 启动盘制作失败反复折腾 ⚠️ 操作失…

DeepSeek大模型 —— 全维度技术解析

DeepSeek大模型 —— 全维度技术解析 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff01;点我试试&#xff01;&#xff01; 文章目录 DeepSeek大模型 —— 全维度技术解析一、模型架构全景解析1.1…

AGI 之 【Dify】 之 使用 Docker 在 Windows 端本地部署 Dify 大语言模型(LLM)应用开发平台

AGI 之 【Dify】 之 使用 Docker 在 Windows 端本地部署 Dify 大语言模型&#xff08;LLM&#xff09;应用开发平台 目录 AGI 之 【Dify】 之 使用 Docker 在 Windows 端本地部署 Dify 大语言模型&#xff08;LLM&#xff09;应用开发平台 一、简单介绍 二、Docker 下载安…

外键 FK enable constraints enq:TM lock

ALTER TABLE X ENABLE NOVALIDATE CONSTRAINT XX&#xff1b; 如果referenced 表在DML 就会出现 enq:TM lock

深度学习语义分割数据集全景解析

一、语义分割任务概述 语义分割是计算机视觉领域的核心任务之一&#xff0c;目标是通过算法将图像中的每个像素精准划分到对应的语义类别&#xff08;如道路、车辆、行人等&#xff09;。高质量标注数据集是推动该领域发展的关键因素。本文将系统梳理主流数据集的技术特征与适…

【芯片设计】处理器芯片大厂前端设计工程师面试记录·20250307

面试问题和ds的参考答案 好的,我现在需要处理用户的请求,他们希望我扩展之前的回答,使其更详细、更丰富。首先,我需要回顾之前的回答,看看哪些部分可以进一步展开。用户提到“回答多说一些!”,这意味着他们希望每个问题的回答内容更深入,包含更多的技术细节、实际案例…

C++特殊类设计

目录 不能被拷贝的类 只能在堆上创建对象的类 构造函数私有化&#xff1a; 析构函数私有化&#xff1a; 只能在栈上创建对象的类 不能被继承的类 只能创建一个对象的类(单例模式) 设计模式&#xff1a; 单例模式&#xff1a; 饿汉模式&#xff1a; 懒汉模式&#xff1a; 线程…

Linux系统之配置HAProxy负载均衡服务器

Linux系统之配置HAProxy负载均衡服务器 前言一、HAProxy介绍1.1 HAProxy简介1.2 主要特点1.3 使用场景二、本次实践介绍2.1 本次实践简介2.2 本次实践环境规划三、部署两台web服务器3.1 运行两个Docker容器3.2 编辑测试文件3.3 访问测试四、安装HAProxy4.1 更新系统软件源4.2 安…

从零开始学机器学习——什么是机器学习

这个系列的文章旨在为初学者提供机器学习知识&#xff0c;避免使用专业术语和复杂的概念&#xff0c;以便更好地理解和应用。 首先给大家介绍一个很好用的学习地址&#xff1a;https://cloudstudio.net/columns 机器学习 在这里简要介绍机器学习&#xff1a;它利用真实世界或…

AI驱动的消费者体验优化——DeepBI如何用智能策略助力亚马逊卖家“俘获”消费者的心

在亚马逊这个竞争异常激烈的电商平台上&#xff0c;消费者体验已经成为决定卖家成败的关键因素之一。优质的消费者体验不仅能够提升客户满意度&#xff0c;还能加速口碑传播&#xff0c;带动销量持续增长。 今天&#xff0c;我们就来深入解析&#xff0c;DeepBI如何依托 AI 驱动…

Devart dbForge Studio for MySQL Enterprise 9.0.338高效数据库管理工具

Devart dbForge Studio for MySQL Enterprise 9.0.338 是一款功能强大的 MySQL 数据库管理工具&#xff0c;专为数据库开发人员和管理员设计。它提供了丰富的功能&#xff0c;帮助用户更高效地管理、开发和维护 MySQL 数据库 Devart dbForge Studio for MySQL Enterprise 9.0.…

SQL_语法

1 数据库 1.1 新增 create database [if not exists] 数据库名; 1.2 删除 drop database [if exists] 数据库名; 1.3 查询 (1) 查看所有数据库 show databases; (2) 查看当前数据库下的所有表 show tables; 2 数据表 2.1 新增 (1) 创建表 create table [if not exists…