Java中常见的设计模式汇总?(java常见的设计模式有哪些)
wxin55 2024-11-06 12:49 9 浏览 0 评论
设计模式是一套经过验证的设计方案和最佳实践,这些经验和方案主要就是用来解决软件设计过程中一些特定的问题。设计模式并不是代码本身,而是一种用来解决某种问题的抽象的解决方案,也就是说设计模式是在不同的语言、不同的场景中进行复用的。一般情况下我们可以将设计模式分为三类创建型模式、结构型模式和行为型模式。下面我们就分别介绍一下这三类设计模式中包含的内容。
创建型模式 (Creational Patterns)
创建型设计模式,主要涉及对象实例化的方式,是用来帮助系统独立对象的创建过程,如下所示,是常见的创建型的设计模式,其中比较常用的就是单例以及工厂设计模式。
单例模式(Singleton Pattern)
单例设计模式的使用,主要是为了确保在系统中一个类只有一个实例,并且通过这个单例类提供一个全局访问点。
工厂方法模式(Factory Method Pattern)
定义一个用于创建对象的接口,但由子类决定实例化哪一个类。
抽象工厂模式(Abstract Factory Pattern)
提供一个创建一系列相关或依赖对象的接口,而无需指定它们的具体类。
建造者模式(Builder Pattern)
将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。
原型模式(Prototype Pattern)
原型模式主要就是通过对现有对象的复制操作来创建新的对象,而不是通过New这种方式通过实例化的方式来创建对象,可以保证创建对象都是同一个原型出品。
结构型模式 (Structural Patterns)
构建型设计模式,主要的作用就是帮助系统进行对象的组合,如下所示。
适配器模式(Adapter Pattern)
将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的类可以一起工作。
桥接模式(Bridge Pattern)
桥接模式就是将对象的抽象部分与它的实现部分分离,使它们都可以独立地变化。
组合模式(Composite Pattern)
将对象组合成树形结构以表示“部分-整体”的层次结构,使得客户端对单个对象和组合对象具有一致的处理方式。
装饰器模式(Decorator Pattern)
动态地给对象添加职责,将对象的职责附加到某个类上,通常在不修改原始类的情况下扩展功能。
外观模式(Facade Pattern)
为子系统中的一组接口提供一个一致的接口,使得子系统更易于使用。
享元模式(Flyweight Pattern)
通过共享尽可能多的对象来减少内存使用,适用于大量相似对象的场景。
代理模式(Proxy Pattern)
为其他对象提供一个代理,以控制对这个对象的访问,这个也是在开发过程中比较常用的一种设计模式
行为型模式 (Behavioral Patterns)
行为型设计模式,顾名思义,就是用来管理类或对象之间的交互,用来解决系统之间对象交互的管理,如下所示。
责任链模式(Chain of Responsibility Pattern)
通过将请求沿着一条链传递,让多个对象有机会处理该请求,避免请求的发送者和接收者耦合在一起。
命令模式(Command Pattern)
将请求封装为对象,从而使得可以用不同的请求来参数化其他对象,并支持请求的撤销和重做操作。
解释器模式(Interpreter Pattern)
解释器模式,为语言创建解释器,使得语言中的句子能够解释为抽象语法树。
迭代器模式(Iterator Pattern)
通过迭代器模式,提供一种顺序访问一个聚合对象中的各个元素的方法,而无需暴露该对象的内部表示。
中介者模式(Mediator Pattern)
定义一个中介对象来封装一组对象的交互方式,从而使这些对象之间不必显式地相互引用,达到松耦合的目的。
备忘录模式(Memento Pattern)
备忘录模式,是在不破坏封装操作的前提下,对对象内部状态进行捕捉,然后在后续需要的时候恢复对象的这个状态。
观察者模式(Observer Pattern)
定义对象之间的一对多依赖关系,当一个对象状态改变时,所有依赖它的对象都会收到通知并自动更新。
状态模式(State Pattern)
状态模式,它允许了对象的内部状态发生变化的时候对其行为进行改变,有点类似于修改了它的类的操作方式。
策略模式(Strategy Pattern)
定义一系列算法,将每个算法封装起来,并使它们可以互换,算法的变化不会影响使用算法的客户。
模板方法模式(Template Method Pattern)
定义一个操作中的算法框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重定义该算法的某些步骤。
访问者模式(Visitor Pattern)
表示一个作用于某对象结构中的各元素的操作,使得可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
总结
每种设计模式都有其适用的场景,例如如果你需要确保一个类只有一个实例,你可以使用单例模式。如果你需要为现有的类提供不同的接口,可以使用适配器模式等等。通过熟悉并掌握这些设计模式,可以在软件开发中更加灵活、优雅地解决各种复杂问题。
相关推荐
- Java框架 —— Spring简介
-
简介一般来说,Spring指的是SpringFramework,它提供了很多功能,例如:控制反转(IOC)、依赖注入(DI)、切面编程(AOP)、事务管理(TX)主要jar包org.sprin...
- Monkey自动化测试
-
Monkey1.通过Monkey程序模拟用户触摸屏幕、滑动Trackball、按键等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常;2.Monkey主要用于Android的压力...
- 十年之重修SpringBoot启动&自动装载&Bean加载过程
-
总结Springboot的自动装载,完全是依赖Bean的自动注册,其中默认的规则,是把需要自动装载的bean全名称编辑在spring.factories(2.7之后的版本,还支持.imports文件)...
- 一些可以显著提高大型 Java 项目启动速度的尝试
-
我们线上的业务jar包基本上普遍比较庞大,动不动一个jar包上百M,启动时间在分钟级,拖慢了我们在故障时快速扩容的响应。于是做了一些分析,看看Java程序启动慢到底慢在哪里,如何去优化,...
- class 增量发包改造为 jar 包方式发布
-
大纲class增量发包介绍项目目录结构介绍jar包方式发布落地方案class增量发包介绍当前项目的迭代修复都是通过class增量包来发版本的将改动的代码class增量打包,如下图cla...
- Flink架构及其工作原理(很详细)
-
原文链接:https://www.cnblogs.com/code2one/p/10123112.html关键词:Flink架构、面试杀手锏!更多大数据架构、实战经验,欢迎关注【大数据与机器学习】,...
- 大促系统优化之应用启动速度优化实践
-
作者:京东零售宋维飞一、前言本文记录了在大促前针对SpringBoot应用启动速度过慢而采取的优化方案,主要介绍了如何定位启动速度慢的阻塞点,以及如何解决这些问题。希望可以帮助大家了解如何定位该类问...
- Maven工程如何使用非Maven仓库jar包
-
使用Maven之前,一直都是自己手工在网上搜索需要的jar包,然后添加到工程中。以这样的方式开发,工作了好多年,曾经以为以后也会一直这样下去。直到碰上Maven,用了第一次,就抛弃老方法了。Maven...
- 【推荐】一款开源免费、功能强大的短链接生成平台
-
项目介绍reduce是一款开源免费、功能强大的短链接生成平台。部署在服务器,使用短域名解析即可提供服务。CoodyFramework首秀,自写IOC、MVC、ORM、TASK、JSON、DB连接池、...
- K8S官方java客户端之七:patch操作
-
欢迎访问我的GitHubhttps://github.com/zq2599/blog_demos内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;...
- Java 的业务逻辑验证框架 之-fluent-validator
-
开发人员在维护核心业务逻辑的同时,还需要为输入做严格的校验。当输入不合法时,能够给caller一个明确的反馈,最常见的反馈就是返回封装了result的对象或者抛出exception。一些常见...
- 互联网大厂后端必看!手把手教你替换 Spring Boot 中的日志框架
-
在互联网大厂的后端开发工作中,SpringBoot框架是搭建项目的“得力助手”,使用十分普遍。但不少开发者都遇到过这样的困扰:SpringBoot默认集成的Logback日志框架,在实际...
- 测试经理教你如何用monkey进行压力测试!
-
一、monkey是什么1、monkey程序由android系统自带,使用Java语言写成,在Android文件系统中的存放路径是:/system/framework/monkey.jar2、Mo...
- Java-Maven详解
-
一、什么是Maven?ApacheMaven是一个软件项目管理的综合工具。基于项目对象模型(POM)的概念,提供了帮助管理构建、文档、报告、依赖、发布等方法,Maven简化和标准化项目建设过程。处理...
- SpringBoot打包部署最佳实践
-
springboot介绍SpringBoot目前流行的javaweb应用开发框架,相比传统的spring开发,springboot极大简化了配置,并且遵守约定优于配置的原则即使0配置也能正常运...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- hive行转列函数 (63)
- sourcemap文件是什么 (54)
- display none 隐藏后怎么显示 (56)
- 共享锁和排他锁的区别 (51)
- httpservletrequest 获取参数 (64)
- jstl包 (64)
- qsharedmemory (50)
- watch computed (53)
- java中switch (68)
- date.now (55)
- git-bash (56)
- 盒子垂直居中 (68)
- npm是什么命令 (62)
- python中+=代表什么 (70)
- fsimage (51)
- nginx break (61)
- mysql分区表的优缺点 (53)
- centos7切换到图形界面 (55)
- 前端深拷贝 (62)
- kmp模式匹配算法 (57)
- jsjson字符串转json对象 (53)
- jdbc connection (61)
- javascript字符串转换为数字 (54)
- mybatis 使用 (73)
- 安装mysql数据库 (55)