探索Java中的设计模式:原则与实例

深入Java设计模式:23种模式的代码实例解析 本文还有配套的精品资源,点击获取 简介:Java设计模式,分为创建型、结构型和行为型三类,共23种模式。这些模式是开发者智慧的结晶,目的是提升代码的可读性、可维护性和复用性。文章通过实例代码详细解读这些模式,使开发者能迅速应用到实际项目中,并理解每种模式的意图、适用场景及优缺点,从而在面对编程问题时能快速找到合适的设计模式解决方案。设计模式的应用不仅限于Java,也可用于其... 阅读详情

探索Java中的设计模式:原则与实例

大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天,我们将深入探讨Java中的设计模式,包括一些关键的设计原则和具体的实例。设计模式是软件工程中的重要组成部分,它们提供了一套经过验证的解决方案来应对常见的设计问题。

一、设计模式的基本原则

  1. 单一职责原则(SRP)

    一个类应该只有一个原因引起它的变化。简单来说,就是每个类应该有且仅有一个责任。

  2. 开放-关闭原则(OCP)

    软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。换句话说,应该通过扩展来增加功能,而不是修改已有代码。

  3. 里氏替换原则(LSP)

    子类对象应该能够替换掉所有父类对象,并且程序的行为不会改变。这确保了继承的正确性。

  4. 接口隔离原则(ISP)

    一个类对另一个类的依赖应当建立在最小的接口上。即一个接口应该尽量小,避免创建过多的方法。

  5. 依赖倒置原则(DIP)

    高层模块不应该依赖低层模块,二者都应该依赖抽象;抽象不应该依赖细节,细节应该依赖抽象。

二、常见设计模式及其Java实现

  1. 单例模式(Singleton Pattern)

    单例模式确保一个类只有一个实例,并提供一个全局访问点。它常用于需要全局共享的资源,如配置管理器。

    package cn.juwatech.singleton;
    
    public class Singleton {
        private static Singleton instance;
    
        private Singleton() {
            // 私有构造函数防止外部实例化
        }
    
        public static synchronized Singleton getInstance() {
            if (instance == null) {
                instance = new Singleton();
            }
            return instance;
        }
    }
    

    该实现使用了双重检查锁定,以减少同步开销。

  2. 工厂模式(Factory Pattern)

    工厂模式提供了一个创建对象的接口,但由子类决定实例化哪一个类。它用于创建复杂对象。

    package cn.juwatech.factory;
    
    // 产品接口
    interface Product {
        void use();
    }
    
    // 具体产品
    class ConcreteProductA implements Product {
        @Override
        public void use() {
            System.out.println("Using Product A");
        }
    }
    
    class ConcreteProductB implements Product {
        @Override
        public void use() {
            System.out.println("Using Product B");
        }
    }
    
    // 工厂类
    public class ProductFactory {
        public static Product createProduct(String type) {
            switch (type) {
                case "A":
                    return new ConcreteProductA();
                case "B":
                    return new ConcreteProductB();
                default:
                    throw new IllegalArgumentException("Unknown product type");
            }
        }
    }
    

    客户端代码使用ProductFactory来创建具体的产品实例,而无需知道具体的实现类。

  3. 观察者模式(Observer Pattern)

    观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象。当主题对象发生改变时,所有依赖于它的观察者都会收到通知。

    package cn.juwatech.observer;
    
    import java.util.ArrayList;
    import java.util.List;
    
    // 主题接口
    interface Subject {
        void addObserver(Observer observer);
        void removeObserver(Observer observer);
        void notifyObservers();
    }
    
    // 观察者接口
    interface Observer {
        void update(String message);
    }
    
    // 具体主题
    class ConcreteSubject implements Subject {
        private final List<Observer> observers = new ArrayList<>();
        private String state;
    
        @Override
        public void addObserver(Observer observer) {
            observers.add(observer);
        }
    
        @Override
        public void removeObserver(Observer observer) {
            observers.remove(observer);
        }
    
        @Override
        public void notifyObservers() {
            for (Observer observer : observers) {
                observer.update(state);
            }
        }
    
        public void setState(String state) {
            this.state = state;
            notifyObservers();
        }
    }
    
    // 具体观察者
    class ConcreteObserver implements Observer {
        private final String name;
    
        public ConcreteObserver(String name) {
            this.name = name;
        }
    
        @Override
        public void update(String message) {
            System.out.println(name + " received message: " + message);
        }
    }
    
    // 测试观察者模式
    public class ObserverExample {
        public static void main(String[] args) {
            ConcreteSubject subject = new ConcreteSubject();
            Observer observer1 = new ConcreteObserver("Observer 1");
            Observer observer2 = new ConcreteObserver("Observer 2");
    
            subject.addObserver(observer1);
            subject.addObserver(observer2);
    
            subject.setState("New State");
        }
    }
    

    以上代码展示了如何使用观察者模式来实现主题和观察者之间的通知机制。

  4. 策略模式(Strategy Pattern)

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

    package cn.juwatech.strategy;
    
    // 策略接口
    interface Strategy {
        int execute(int a, int b);
    }
    
    // 具体策略
    class AddStrategy implements Strategy {
        @Override
        public int execute(int a, int b) {
            return a + b;
        }
    }
    
    class SubtractStrategy implements Strategy {
        @Override
        public int execute(int a, int b) {
            return a - b;
        }
    }
    
    // 上下文
    public class Context {
        private final Strategy strategy;
    
        public Context(Strategy strategy) {
            this.strategy = strategy;
        }
    
        public int executeStrategy(int a, int b) {
            return strategy.execute(a, b);
        }
    }
    
    // 测试策略模式
    public class StrategyExample {
        public static void main(String[] args) {
            Context context = new Context(new AddStrategy());
            System.out.println("Add: " + context.executeStrategy(5, 3));
    
            context = new Context(new SubtractStrategy());
            System.out.println("Subtract: " + context.executeStrategy(5, 3));
        }
    }
    

    在这段代码中,Context类使用不同的策略对象来执行算法,而无需知道具体的实现细节。

总结

设计模式提供了一种高效的解决方案来应对常见的软件设计问题。在Java中,设计模式不仅可以提升代码的可读性和可维护性,还能够帮助开发者构建更加灵活和可扩展的系统。通过掌握设计模式及其原则,能够在实际开发中更加得心应手,编写出高质量的代码。

本文著作权归聚娃科技微赚淘客系统开发者团队,转载请注明出处!

用Multisim仿真AD630锁定放大器:从2012年电赛A题实战到避坑指南 本文详细介绍了如何使用Multisim仿真AD630锁定放大器,从2012年电赛A题实战出发,提供完整的电路搭建、参数优化及避坑指南。重点解析AD630的开关调制架构和双相位检测的工程实现,帮助读者在强噪声背景下有效提取微弱信号,提升电子设计竞赛和工程实践中的信号处理能力。 阅读详情

相关推荐

三分钟解决RKNN-Toolkit2安装失败:从模块报错到成功验证的完整记录

本文详细记录了RKNN-Toolkit2安装失败的解决方案,从环境配置到模型转换实战,特别针对常见的'No module named 'rknn''报错提供了完整修复指南。通过YOLOv8模型转换示例,展示了从ONNX到RKNN格式的完整流程,并分享了在RK3588芯片上的部署优化技巧。

html8的博客 265

Java 三种设计模式实例实现

一. 题目分析 熟悉建模工具。 掌握简单工厂模式、工厂方法模式、抽象工厂模式,并进行设计应用。 ①.简单工厂模式 使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数M,则返回一个Man对象,如果传入参数W,则返回一个Woman对象,请实现该场景。现需要增加一个新的Robot类,如果传入参数 R,则返回一个Robot对象,对代码进行修改并注意女娲的变化。 ※分析:简单工厂模...

qq_41753944的博客 3835

Mac新手必看:为什么你的终端找不到Python命令?5分钟搞定zsh报错

本文针对Mac用户在终端遇到“zsh: command not found: python”报错的问题,提供了深度解析与实战修复指南。文章解释了macOS系统因历史原因默认使用`python3`而非`python`命令,并详细介绍了四种解决方案:养成使用`python3`的习惯、创建别名、通过Homebrew安装链接以及修改PATH环境变量,帮助新手快速解决zsh报错,顺利开始Python开发。

weixin_29248653的博客 596

Java设计模式之七大设计原则

Java设计模式之七大设计原则 本文对Java设计模式中的七大设计原则进行汇总介绍,提炼最核心的概念。 设计模式总结笔记 一、设计模式七大原则 设计模式的目的: 代码可重用性:相同功能的代码,不用多次编写。 可读性:编程规范性,便于其他程序员的阅读和理解。 可扩展性:当需要增加新的功能的时候,非常方便,称为可扩展性。 可靠性:当我们新增功能后,对原来的功能没有影响。 使程序呈现高内聚、低耦合特性。 1.1、单一职责原则 不遵守单一职责原则: 对类来说的,就是一个类应该只负责一项职责。 比如:Us

qq_49529322的博客 1万+

《LabVIEW ZYNQ实战指南》第6章>>案例解析:基于USB WiFi模块的ZYNQ无线通信部署与Linux RT开发

本文详细解析了如何为ZYNQ开发板部署USB WiFi模块,实现无线通信。通过LabVIEW Linux RT环境,利用封装好的驱动VI,开发者可轻松配置ZYNQ连接无线网络,摆脱网线束缚,实现程序无线部署与远程调试,为工业物联网应用奠定基础。

app77的博客 755

威联通改装飞牛fnOS全攻略:从刷机到Docker影视部署

NAS系统是家庭数字存储的核心,x86架构的威联通设备凭借通用引导和驱动支持,成为改装替代系统的理想平台。飞牛fnOS作为基于Debian的国产NAS系统,以简洁UI、内置Docker和影视墙以及硬件转码能力,吸引了大量玩家。通过U盘引导安装、BIOS调整、系统盘SSD部署,可实现系统切换;原机械硬盘可挂载为存储池,配合Docker部署下载、远程访问等容器,影视中心自动削刮海报墙,硬件转码保障4K播放。改装过程需注意引导失败、硬盘识别、核显驱动等问题。这套方案能让老旧威联通焕发新生,兼顾易用性与扩展性。本文

weixin_33585822的博客 776

Java系统设计

一.认证和授权 认证:简单来说认证就是对用户信息(用户名和密码)的校验 授权:发生在用户认证之后,掌管我们访问系统的权限,比如说某些特定的资源只有特定权限的人能够访问比如admin,授权之后才能增,删,改,查的操作。 二.什么是Cookie?Cookie的作用是什么? Cookie是用来跟踪浏览器用户身份的会话方式,也可以说用来跟踪用户的状态,cookie中存放了用户的信息,它可运用在这几个方面: 1.平时我们登录账号记住密码之后下次登录可以自动登录,因为第一次登录保存了用户信息。 2.Cook

liaozhongmin_net 1277

用Python和NumPy可视化理解波函数:从概率密度到薛定谔方程的可视化教程

本文通过Python和NumPy实现量子力学波函数的可视化,从概率密度到薛定谔方程的动态演化,帮助读者直观理解量子态的特性。教程涵盖无限深势阱、量子谐振子等模型,结合代码示例展示时间演化和期望值计算,为量子力学学习提供实用工具。

weixin_27303545的博客 227

Java程序设计六大原则&设计模式

一个接口或者类只有一个原因引起变化,即一个接口或者类只有一个职责,负责一件事情。(此原则同样适用于方法)好处:1、复杂性降低;2、可读性提高;3、可维护性提高;4、变更风险降低。

sziitjin的博客 1743

基于深度学习的图像识别技术在农业领域中的应用

是识别"病害种类"还是"病害严重度分级"?前者是分类,后者常需分割或分级回归。是叶片级(离体叶片图像)、植株级(田间单株)、地块级(无人机俯拍)?视角不同,模型差异巨大。实时无人机巡检可能要求 < 50 ms/帧(Jetson Orin),而离线测报可接受秒级推理。类别标签、结构化 JSON、GIS 图斑、报警事件?

AI天才研究院 2174

【异常】OpenClaw调用火山引擎大模型提示词 Agent failed before reply: All models failed (6): volcengine/kimi-k2-5-26

摘要: 本文针对OpenClaw调用火山引擎大模型服务时触发的全量熔断报错(All models failed)提供全链路排查方案。报错核心为服务熔断(cooldown)和模型不可用(model_not_found),主要源于账号权限、API凭证失效或模型标识错误。解决方案按优先级分步实施:1)校验账号状态与AK/SK有效性;2)核对官方模型标识;3)重启服务解除熔断;4)修复配置文件;5)通过原生API测试定位网络或服务端问题。日志分析(openclaw logs)可快速识别HTTP状态码(如401/40

奶爸的编程之路,也就一周冷个三天 838

Java 6大设计原则28大设计模式

6大设计原则: 1. 单一职责原则 单一职责原则的英文名称是Single Responsibility Principle,简称是SRP(There should never be more than one reason for a class to change.) 见名知意,充斥着满满的争议,需求的更替,版本的迭代,场景的复杂,种种都能导致这个被破坏,但是把出发点是好的,单一意味着简单,简单意味着易懂,而后易维护、节省人力、成本、增加稳定性;但是场景复杂时就类就多了,em...;仁者见仁智者见

z3191595的博客 4974

21天教你学会PCIe专栏(21)--项目实例:构建一个基于 PCIe 的 NVMe SSD 阵列存储系统

构建一个高性能的 NVMe SSD 阵列存储系统,利用 PCIe 连接多块 NVMe SSD,实现高带宽和低延迟的数据存储。该系统将支持多种存储配置,如 RAID 0、RAID 1 和 RAID 5,以满足不同的性能和可靠性需求。通过上述步骤,你可以构建一个基于 PCIe 的 NVMe SSD 阵列存储系统。这个系统能够提供高带宽和低延迟的数据存储,并支持多种 RAID 配置以满足不同的性能和可靠性需求。

xiaoheshang_123的博客 200

Java设计原则和设计模式

一、创建型模式(5种) 1.1 工厂模式 简单的说本质是实列工厂,即按照不同的业务类型去取对应业务bean,常常伴随着策略模式使用。而工厂模式的核心是就是在容器启动时就已经注册好了,即开箱即用。 1.2 单例模式 一个类产生一个对象 1.2.1 双重检查加锁 1.2.2懒汉和饿汉模式 3.建造者模式 将内部复杂的对象属性构建流程封装起来,便于客户端快速构建类的属性。如典型lombok插件构造属性值,当然你也可以自己写一个建造者方法构建属性 4.原型模式 通过给出一个原型对象...

sinat_34814635的博客 741

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Java中的设计模式应用实例

单例模式是最简单也是最常用的设计模式之一,它确保某个类只有一个实例,并且提供全局访问点。通常用于需要全局共享的数据、配置或者资源管理类。工厂模式是一种创建型设计模式,用于创建对象。工厂模式将对象的创建过程封装到一个工厂类中,使得客户端无需知道如何创建对象,只需要通过工厂方法来获取对象。观察者模式是一种行为型设计模式,定义了对象之间一对多的依赖关系。当一个对象的状态发生改变时,它的所有依赖者(观察者)都会被自动通知并更新。

一碗黄焖鸡三碗米饭的博客 1057

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

java的工厂设计模式实例

/* *工厂类实例 *通过一个工厂类实现生产水果这个特征的对象 */ interface Fruit{//水果接口 public void eat(); } class Apple implements Fruit{//苹果类 public void eat(){ System.out.println("这个水果是个苹果!"); } } class Orange implements

yyyfff43的专栏 710

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

java 多例_Java多例设计模式实例详解

本文实例讲述了Java多例设计模式。分享给大家供大家参考,具体如下:一、多例设计模式定义多例设计模式就是存在多个对象实例,供外部应用裯用,比喻数据库连接池。二、多例模式静态类图三、多例模式代码实现1. 多例模式核心类package com.demo.multipleton;import java.util.ArrayList;/*** 多例模式** @author**/public class M...

weixin_42344395的博客 878

java类多例_Java多例设计模式实例详解

本文实例讲述了Java多例设计模式。分享给大家供大家参考,具体如下:一、多例设计模式定义多例设计模式就是存在多个对象实例,供外部应用裯用,比喻数据库连接池。二、多例模式静态类图三、多例模式代码实现1. 多例模式核心类package com.demo.multipleton;import java.util.ArrayList;/*** 多例模式** @author**/public class M...

weixin_42489714的博客 378

java设计模式 案例_java中设计模式(多例)的实例详解

java中设计模式(多例)的实例详解多例:单例设计模式的变形,可以看成是一个缓存池的单例,而缓存池里面可以存多个数据实例代码://单例+缓存---没有控制池大小public class A {//1创建一个单例的池(private即把池封装成单例了)private static Map pool = new HashMap(); //池--集合: Map:key-valuepublic synch...

weixin_35726575的博客 335

java多例设计模式是什么_Java多例设计模式实例详解

本文实例讲述了java多例设计模式。分享给大家供大家参考,具体如下:一、多例设计模式定义多例设计模式就是存在多个对象实例,供外部应用裯用,比喻数据库连接池。二、多例模式静态类图三、多例模式代码实现1. 多例模式核心类package com.demo.multipleton;import java.util.arraylist;/*** 多例模式** @author**/public class m...

weixin_28984379的博客 199

Java设计模式--实例

本文介绍Java设计模式的实例。

IT利刃出鞘的博客 811

Java 23种设计模式+23个实例demo:掌握设计模式的实战利器

Java 23种设计模式+23个实例demo:掌握设计模式的实战利器 去发现同类优质开源项目:https://gitcode.com/ 在软件开发领域,设计模式是一种经过验证的解决方案,用以解决特定场景下的问题。今天要推荐的这个项目——Java 23种设计模式+23个实例demo,正是为了帮助开发者更好地理解和实践这些经典设计模式。 项目介绍 Java 23种设计模式+23个实例demo,这是一个...

gitblog_06785的博客 1016

Java 23种设计模式+23个实例demo

Java 23种设计模式+23个实例demo 去发现同类优质开源项目:https://gitcode.com/ 本资源包含Java中23种经典设计模式的实例代码。每个设计模式均对应一个独立的目录,便于您学习和实践。 资源说明 代码编写基于个人对设计模式的学习和理解。 每个设计模式为一个独立目录,目录名即为模式名称。 所有代码使用JDeveloper 9i和JBuilder 6.0编写,并已编译、...

gitblog_06745的博客 340

装饰模式实例+java,java 中设计模式(装饰设计模式)的实例详解

java 中设计模式(装饰设计模式)的实例详解应用场景:在不对原有对象类进行修改的基础上,给一个或多个已有的类对象提供增强额外的功能.我觉得可以从字面理解,装饰,装饰房子。房子可以看成原有的类。等于你把一个已经建好的房子按照自己的想法再装饰一遍。继承也可以实现这样的功能,但是继承有它的缺点,继承只是单一继承。装饰设计模式可以取多个不同的类的不同功能。具体步骤:◎第1步:通过构造传参把需要加强的类传...

weixin_27251469的博客 98

Java常用设计模式-代码实例详解

双重检查锁(Double-Checked Locking)确保线程安全,适用于延迟加载。确保一个类只有一个实例,并提供全局访问点。定义一个创建对象的接口,由子类决定实例化哪个类,推迟实例化到子类。:在一个电商系统中,需要一个全局日志管理器记录操作日志。:饿汉式在类加载时初始化,简单但不支持延迟加载。提供一种顺序访问集合元素的方法,隐藏底层实现。定义一对多依赖,主体状态变化时通知观察者。为对象提供代理,控制访问或增强功能。动态为对象添加职责,不修改原有类。:支持文件日志和数据库日志。

print_helloword的博客 877
上一篇: Java后端分布式系统的服务发现:Consul与Eureka的比较
下一篇: Java中的内存模型与并发编程优化
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值