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

Java 中常用的设计模式可分为三大类

Java 中常用的设计模式可分为三大类:创建型模式、结构型模式和行为型模式。以下是各类中最常用的设计模式及其应用场景:

一、创建型模式(Creational Patterns)

专注于对象创建机制,隐藏创建逻辑,使代码更灵活。

  1. 单例模式(Singleton)

    • 特点:确保一个类只有一个实例,并提供全局访问点。
    • 应用:日志工具、配置管理器、线程池等。
    • 实现:懒汉式(延迟初始化)、饿汉式(预初始化)、枚举单例(线程安全)。
    public class Singleton {// 饿汉式(线程安全)private static final Singleton INSTANCE = new Singleton();private Singleton() {} // 私有构造防止实例化public static Singleton getInstance() { return INSTANCE; }
    }
    
  2. 工厂模式(Factory)

    • 简单工厂:通过一个工厂类创建不同类型的对象(违反开闭原则)。
    • 工厂方法:定义创建对象的接口,由子类决定实例化哪个类(符合开闭原则)。
    • 抽象工厂:创建一系列相关或依赖的对象,无需指定具体类。
    • 应用:日志记录器(创建不同类型的日志对象)、数据库连接工厂。
  3. 建造者模式(Builder)

    • 特点:分步构建复杂对象,分离构建与表示。
    • 应用:StringBuilder、OkHttp 的请求构建、POJO 复杂对象创建。
    public class User {private final String name;private final int age;private User(Builder builder) {this.name = builder.name;this.age = builder.age;}public static class Builder {private String name;private int age;public Builder name(String name) { this.name = name; return this; }public Builder age(int age) { this.age = age; return this; }public User build() { return new User(this); }}
    }
    // 使用:new User.Builder().name("Alice").age(20).build()
    
  4. 原型模式(Prototype)

    • 特点:通过复制现有对象创建新对象,避免重复初始化。
    • 应用:复杂对象的复制(如 Spring 的 BeanUtils.copyProperties)。

二、结构型模式(Structural Patterns)

处理类或对象的组合,实现更灵活的结构。

  1. 代理模式(Proxy)

    • 特点:为对象提供代理类,控制对原对象的访问。
    • 应用:远程代理(RPC)、延迟加载(MyBatis 懒加载)、AOP 增强(Spring AOP)。
  2. 装饰器模式(Decorator)

    • 特点:动态给对象添加额外功能,不改变原类结构。
    • 应用:Java IO 流(如 BufferedReader 装饰 FileReader)。
    // 装饰器示例:给咖啡加奶
    public interface Coffee { String getDescription(); double cost(); }
    public class SimpleCoffee implements Coffee { ... }
    public class MilkDecorator implements Coffee {private Coffee coffee;public MilkDecorator(Coffee coffee) { this.coffee = coffee; }public String getDescription() { return coffee.getDescription() + ", Milk"; }public double cost() { return coffee.cost() + 1.0; }
    }
    
  3. 适配器模式(Adapter)

    • 特点:将一个类的接口转换为另一个接口,使不兼容的类可协同工作。
    • 应用:Java 的 InputStreamReader(将字节流适配为字符流)、旧系统接口适配新接口。
  4. 组合模式(Composite)

    • 特点:将对象组合成树形结构,统一处理单个对象和组合对象。
    • 应用:文件系统(文件和文件夹的统一操作)、UI 组件树(如 Swing 的 ContainerComponent)。
  5. 外观模式(Facade)

    • 特点:为复杂系统提供简化接口,隐藏内部细节。
    • 应用:框架的入口类(如 Spring 的 ApplicationContext)、支付系统统一接口。

三、行为型模式(Behavioral Patterns)

关注对象间的通信和职责分配。

  1. 观察者模式(Observer)

    • 特点:对象间一对多依赖,当一个对象变化时,所有依赖者自动收到通知。
    • 应用:事件监听(如 Swing 的 ActionListener)、消息队列、Spring 的事件机制。
  2. 策略模式(Strategy)

    • 特点:定义算法家族,使其可相互替换,客户端根据需求选择。
    • 应用:排序算法(选择不同排序策略)、支付方式(微信/支付宝切换)。
  3. 模板方法模式(Template Method)

    • 特点:父类定义算法骨架,子类实现具体步骤,固定流程但灵活扩展。
    • 应用:Spring 的 JdbcTemplate(固定 JDBC 流程,自定义 SQL 和结果映射)。
  4. 迭代器模式(Iterator)

    • 特点:提供遍历集合元素的统一接口,无需暴露集合内部结构。
    • 应用:Java 的 Iterator 接口(遍历 ListSet 等)。
  5. 责任链模式(Chain of Responsibility)

    • 特点:将请求传递给多个处理器,直到有一个处理它。
    • 应用:过滤器链(如 Servlet 的 FilterChain)、异常处理链、权限校验流程。
  6. 命令模式(Command)

    • 特点:将请求封装为对象,使请求的发送者与接收者解耦。
    • 应用:撤销/重做操作、任务调度(如 Quartz 的 Job)、GUI 按钮事件。

设计模式核心原则

  • 开闭原则:对扩展开放,对修改关闭(如工厂方法、装饰器)。
  • 单一职责:一个类只做一件事。
  • 依赖倒置:依赖抽象,不依赖具体实现(如策略模式)。
  • 迪米特法则:最少知道原则,减少对象间耦合(如外观模式)。

实际开发中,需根据场景选择合适模式,避免过度设计。很多框架(如 Spring、MyBatis)大量使用了上述模式,理解它们有助于更好地阅读和设计代码。

http://www.dtcms.com/a/470311.html

相关文章:

  • 工程建设造价全过程监督网站廊坊百度seo公司
  • 陵水网站建设装修设计公司门户网站开发怎么收费
  • Science Robotics 研究综述:基于学习方法的机器人操作动力学模型
  • 记录一次排查Android App启动时偶现卡顿问题的过程
  • 做网站图片的大小顺口好记的公司名字
  • 如何建设网站简介网站做行业认证好处
  • 网站开发用到的框架nginx wordpress样式丢失
  • postman接口测试入门篇
  • 网站建设seo运营规划网站建设 三牛
  • 锦州网站推广企业vi设计公司案例
  • 【vLLM】源码解读:模型如何找到自己初始化的类
  • 简述网站建设基本流程答案益阳有专做网站的吗
  • 网站备案期间网站开发的软件有哪些
  • 记录一个本地服务运行定时任务(控制台应用程序)
  • 高效处理 Excel 海量数据入库:编程脚本、CSV 中间件、图形工具优化全攻略
  • 如何打开国外网站龙江网站建设
  • 网站服务器空间选择长沙专业的网站建设企业
  • redis向量库安装
  • 世纪购网站开发招聘外链推广论坛
  • C++动态规划入门指南——助力CSP竞赛夺冠
  • 优化后端避免k8s HPA成为鸡肋
  • GESP C++ 二级拓展课(二)
  • Repository Contribution Count Action:开源贡献者的专属统计神器
  • B4414 [GESP202509 三级] 日历制作
  • 手机网站分页设计广州网站推广排名
  • 基于 EtherCAT 转 MODBUS RS485 的轧辊轴承智能温控系统应用
  • oa报表网站开发工作室设计
  • vue3中图片裁切组件封装
  • 从 0 到 1 搭建 Python 语言 Web UI自动化测试学习系列 15--二次开发--封装公共方法 3
  • 做新媒体文的网站网站开发 ppt