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

Java的设计模式详解

摘要:设计模式是软件工程中解决常见问题的经典方案。本文结合Java语言特性,深入解析常用设计模式的核心思想、实现方式及实际应用场景,帮助开发者提升代码质量和可维护性。


一、设计模式概述

1.1 什么是设计模式?

设计模式(Design Pattern)是经过验证的、可重复使用的代码设计经验总结,分为创建型结构型行为型三大类,共23种经典模式。

1.2 学习设计模式的意义

  • 提高代码复用性
  • 增强系统扩展性
  • 提升团队协作效率
  • 优化代码结构

二、创建型模式实践

2.1 单例模式(Singleton)

场景:全局唯一对象(如配置管理器)

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)

场景:对象创建逻辑封装

interface Shape {
    void draw();
}

class Circle implements Shape {
    public void draw() {
        System.out.println("绘制圆形");
    }
}

class ShapeFactory {
    public Shape getShape(String type) {
        if ("CIRCLE".equalsIgnoreCase(type)) {
            return new Circle();
        }
        return null;
    }
}

优势:解耦客户端与具体实现类


三、结构型模式解析

3.1 适配器模式(Adapter)

场景:接口兼容转换

class LegacySystem {
    public void legacyRequest() {
        System.out.println("旧系统请求");
    }
}

interface NewSystem {
    void request();
}

class Adapter implements NewSystem {
    private LegacySystem legacy = new LegacySystem();
    
    public void request() {
        legacy.legacyRequest();
    }
}

3.2 装饰器模式(Decorator)

场景:动态扩展功能

interface Coffee {
    double getCost();
}

class BasicCoffee implements Coffee {
    public double getCost() { return 2.0; }
}

abstract class CoffeeDecorator implements Coffee {
    protected Coffee decoratedCoffee;
    
    public CoffeeDecorator(Coffee coffee) {
        this.decoratedCoffee = coffee;
    }
}

class MilkDecorator extends CoffeeDecorator {
    public MilkDecorator(Coffee coffee) {
        super(coffee);
    }
    
    public double getCost() {
        return super.decoratedCoffee.getCost() + 0.5;
    }
}

四、行为型模式应用

4.1 观察者模式(Observer)

场景:事件驱动系统

interface Observer {
    void update(String message);
}

class ConcreteObserver implements Observer {
    public void update(String message) {
        System.out.println("收到通知:" + message);
    }
}

class Subject {
    private List<Observer> observers = new ArrayList<>();
    
    public void addObserver(Observer o) {
        observers.add(o);
    }
    
    public void notifyObservers(String message) {
        observers.forEach(o -> o.update(message));
    }
}

4.2 策略模式(Strategy)

场景:算法灵活切换

interface PaymentStrategy {
    void pay(double amount);
}

class AlipayStrategy implements PaymentStrategy {
    public void pay(double amount) {
        System.out.println("支付宝支付:" + amount);
    }
}

class PaymentContext {
    private PaymentStrategy strategy;
    
    public void setStrategy(PaymentStrategy strategy) {
        this.strategy = strategy;
    }
    
    public void executePayment(double amount) {
        strategy.pay(amount);
    }
}

五、模式选择指南

模式类型典型场景常用模式
创建型对象创建管理工厂、单例、建造者
结构型类/对象组合适配器、代理、装饰器
行为型对象交互观察者、策略、模板方法

相关文章:

  • 【数论4】求解线性同余方程和方程组
  • FPGA | 等精度测频应用与实践
  • RSTP --- 快速生成树
  • 如何成功点亮LED灯并实现闪烁效果
  • ROS软路由多wifi多IP搭建一览表
  • 红黑树剖析
  • DirectX修复工具免费版下载安装教程(附安装包)
  • 蓝桥杯 XYZ
  • elementui中el-form自定义表单校验规则
  • Java后端开发(十八)-- 使用JAXB,将JavaBean转换XML文本
  • 基础知识专题整理-----持续更新
  • lib-zo,C语言另一个协程库,整理
  • leetcode0704. 二分查找-easy
  • 关于labview中路径的问题
  • 一款功能强大的手机使用情况监控工具
  • 探访 DINO 家族 Part 4:融合多模态大语言模型的视觉模型基础 RexSeek
  • 【计算机网络】记录一次校园网无法上网的解决方法
  • Android 地区选择器或者其他选择器
  • 【蓝桥杯14天冲刺课题单】Day 1
  • 指针函数、函数指针和指针函数指针的全面总结
  • 如何申请网址域名/网络优化seo是什么工作
  • 自建网站怎么做二级页跳转/推广网页
  • 完整网站开发视频教程/西安seo顾问培训
  • 国内外高校门户网站建设/2022最近热点事件及评述
  • 深圳网站建设深圳企业网站建设/汕头seo优化
  • 邯郸哪里可以做网站/网站推广途径和推广要点有哪些?