首页 > 其他分享 >23种设计模式,纯简单理解,面试必备

23种设计模式,纯简单理解,面试必备

时间:2024-09-20 18:52:30浏览次数:10  
标签:状态 定义 23 对象 子类 必备 模式 设计模式

文章目录

创建型设计模式

1.单例设计模

全局唯一无可厚非,不做多解释

2.工厂设计模式

其实我们在开发过程中都用到了工厂设计模式的思想,工厂的思想就是只关注你给我什么结果不关注具体实现

3.抽象工厂设计模式

抽象工厂设计模式顾名思义就是自己只是定义好了模板让子类进行帮我实现

4.建造者设计模式

建造者设计模式很好理解!我们在定义构造器的时候,需要定义n个形参,但是需要定义n个构造器来应对不同的场景。我们通过建造者设计模式来设计的话只需要定义一个构造器就可以了。我们可以在类中定义一个内部类,这个内部类和类中有相同的字段,我们把内部类作为构造器的形参就可以解决需要写个构造器了

5.原型设计模式

原型设计模式更好理解!原型允许创建复杂对象的副本,其内部结构不变。在JAVA中的object父类中的clone拷贝及时原型设计模式的一种实现

结构型设计模式

1.适配器设计模式

适配器设计模式主要用于与期望类或者接口不兼容的问题。比如现在我想手机充电,但是插座不适配,我就需要一个转接头,这个转接头就是适配器所做的行为

2.桥接设计模式

桥接设计模式的设计理念就是抽象和实现进行解耦。它们可以独立的变化。比如JAVA中的子类继承父类。各自的实现都可以相互改变,子类也可以进行扩展

3.组合设计模式

组合设计模式的核心在于表示“部分—整体”的层次结构,并允许客户端以一致的方式处理单个对象和组合对象。这意味着无论是处理一个单独的对象还是处理由多个对象组成的复合对象,客户端代码都不需要知道具体的细节,只需要调用同一个接口即可。

4.装饰器设计模式

装饰器模式的核心在于能够在不改变现有类的前提下,动态地给对象添加新的功能。
其实装饰器模式很好理解比如子类继承父类
,子类代码不变,父类增加新的功能,子类可以获取,虽然有类似的理念,但也仅限于次。
具体的实现在代码中也很常见,定义接口类,抽象类进行实现接口类,装饰器类进行继承抽象类进行装饰,这才是完美的符合装饰器设计模式。

5.外观设计模式

这个过于简单不过多解释。大概意思就是在一群接口上套一层壳。对外提供这一个就行了,不需要提供内部的n个接口

6.享元设计模式

享元设计模式通过将对象的状态分为内部状态和外部状态来实现对象的共享。内或外部状态是指可以被共享的对象的状态,反之不可共享。享元设计模式的重点就是尽可能的共享,减少内存开支。
一下代码就类似于享元的一种表现
String s1 = “hello”;
String s2 = “hello”;
System.out.println(s1 == s2); // 输出 true

7.代理设计模式

它允许通过提供一个代理对象来控制对另一个对象的访问。这种模式可以用于实现许多功能,例如远程代理、虚拟代理、保护代理等。
包括我们熟知的jdk动态代理以及cglib动态代理也是代理的一种表现

行为型设计模式

1.访问者设计模式

访问者模式好比就是让新来的专家(访问者)给现有的物品(对象)做检查或维修,而不需要改变物品本身。这样可以不断添加新服务,而不改变原有物品。

2.模板方法设计模式

模板方法模式是一种行为型设计模式,它定义了一个算法的骨架,将某些步骤的具体实现延迟到子类中。
这听上去和抽象工厂设计模式类似。
但也有本质的区别
–模板方法设计模式是定义一个算法骨架,
允许子类在特定的点上有自己的实现
–抽象工厂设计模式用来创建一系列相关的依赖对象而不是具体的类

3.策略设计模式

策略模式很简单,它定义了一系列算法,并将每个算法封装在独立的策略类中,使得它们可以互相替换。通过使用策略模式,可以使得算法的变化独立于使用算法的客户端。
举个简单的例子比如我们定义了四个方法加减乘除

4.状态设计模式

它允许对象在其内部状态发生改变时改变它的行为。通过使用状态模式,可以将一个对象的状态从其行为中分离出来,使得对象可以根据状态来改变其行为。
也可以简单理解,一个对象的状态发生改变时,需要走一遍IF else …

5.观察者设计模式

状态设计模式
其中一个对象(称为主题或可观察者)状态发生变化时会自动通知其他依赖该对象的对象(称为观察者),使得观察者可以更新自己的状态。
好比动物世界的什么老鼠站岗放哨的,老鹰来了赶紧发齐警报,其他老鼠赶紧藏起来。

6.备忘录设计模式

备忘录设计模式超级好理解,备份,数据备份。还需要一个负责人进行恢复备份。

7.中介者设计模式

中介者设计模式的思想就是它能够减少对象之间的依赖关系,使得对象不需要显示地相互引用,从而使耦合性降低,系统易于扩展。
好比mq就可以理解为中介者设计模式的一种实现

8.迭代器设计模式

这个不过多解释!在JAVA代码中很多集合底层都是用了迭代器。迭代器主要用于遍历

9.命令设计模式

其实命令设计模式很好理解,因为我们生活中经常接触到。比如我给你下达命令,你去执行该命令

10.责任链设计模式

在责任链模式中,通常将每个处理者看作一个链表中的节点,每个节点都包含了处理请求的方法以及后继节点的引用。
如果这个节点不能处理它,那么该请求就会被转发给链表中的下一个节点,直到有一个节点能够处理它为止。
也可以理解为 if else吧
其实很多设计模式和技术都有相同之处以及不同之处,只是在不同的角度上来表达不同的观点。

11.解释器设计模式

解释器设计模式就是用来解析规则的
好比我现在要计算加减法 比如 “11”+11=22
一个是字符串一个是数字,就要计算出来给我正确答案

其实有很多设计模式思想都是差不多的,只是站在了不同的角度来描述不同进行解决这些问题行为而已。

标签:状态,定义,23,对象,子类,必备,模式,设计模式
From: https://blog.csdn.net/qq_49841284/article/details/142389865

相关文章

  • KTH7823——16 位高精度低延时霍尔磁编码器可编程 ABZ 和 PWM 输出模式角度传感器
    KTH7823是一款高精度绝对角度霍尔传感器芯片,最高16位分辨率绝对角度输出,可实现在轴向和离轴场合下的无接触式磁场角度测量。不论转速范围在0-120000rpm之间,KTH7823都能快速准确地输出角度信息,适用于需要精准角度测量和转速控制的各个领域。KTH7823......
  • 抽象工厂模式-设计模式
    抽象工厂模式(AbstractFactoryPattern)在Java中是一种非常有用的设计模式,用于创建一系列相关或相互依赖的对象,而无需指定它们具体的类。这个模式提供了一种创建对象的最佳方式,它封装了创建对象的细节,并允许客户依赖于抽象类型而不是具体类型。以下是一个简单的Java案例,展示了抽象工......
  • AI产品经理必备技能:如何从需求挖掘到智能化产品落地
    随着人工智能(AI)技术的蓬勃发展,各行各业都迎来了新一轮的创新与升级。本文将结合电信行业的实际案例,深入解析AI产品经理从需求处理到产品管理的全流程工作。AI产品经理成为了电信行业中的重要角色,他们不仅要管理需求、调研市场,还要利用数据驱动决策、引领产品的智能化升级。......
  • 分块/莫队学习笔记(一)(2024.8.23)
    分块基本概念分块的基本思想是,通过对原数据的适当划分,并在划分后的每一个块上预处理部分信息,从而较一般的暴力算法取得更优的时间复杂度。分块的时间复杂度主要取决于分块的块长,一般可以通过均值不等式求出某个问题下的最优块长,以及相应的时间复杂度。LOJ小分块#6277.数列分......
  • 【工作必备】Reids,小白没装过?
    这里以常用windows为例,在https://github.com/microsoftarchive/redis下载好包后,简单的了解一下redis的文件结构。 更具体的熟悉下,里面配置文件和运行脚本的内容。1.redis.conf redis的集群搭建,主要目的是为了,实现主从复制,分担各个节点的压力,简单的说,常规的主从模......
  • 多项式学习笔记(二)(2024.7.23)
    牛顿迭代快速多项式计算加法\(H(x)=F(x)+G(x)\),求\(H(x)\)解:都已经\(O(n)\)了,还怎么优化!!!乘法\(H(x)\equivF(x)G(x)(\text{mod}x^n)\),求\(H(x)\)解:参考多项式学习笔记(一)(2024.7.6)完整代码:P3803【模板】多项式乘法(FFT)#include<bits/stdc++.h>usingnamespacestd......
  • GEE教程:1950-2023年ECMWF数据中积雪的长时序统计分析
    目录简介数据函数millis()Arguments:Returns: Long代码结果简介1950-2023年ECMWF数据中积雪的长时序统计分析数据ECMWF/ERA5_LAND/DAILY_AGGR是由欧洲中期天气预报中心(ECMWF)提供的数据集。它是一个格网数据集,包含从ERA5-Land再分析数据集中得出的陆地区域每日聚......
  • COSC2391 Further Programming
    COSC2391 FurtherProgramming/COSC1295AdvancedProgrammingAssignment2- Semester 2 20241.IntroductionThisassignmentisdesignedto:•   Evaluateyourabilitytodevelop GUI applications usingJavaFX.•   Evaluateyourskillsin stori......
  • D23 kubernetes 工作负载资源对象-DaemonSet{简介}
    1、DaemonSet简介DaemonSet资源用于在集群中的每个节点上运行一个pod副本,具有以下特点-在每个节点上运行一个pod-当向集群中加入一个新节点或者从集群中移除一个节点时,DaemonSet会自动在新节点上启动一个pod或在移除的节点上删除pod-可以使用节点选择器或亲和性来定义pod......
  • 10月23日,2024 OceanBase 年度发布会在北京等您
    海量数据管理,源于一笔笔记录, 不止于记录, 不仅要保障每一笔记录,更要实现每一份数据的价值。OceanBase正通过一体化架构和一体化引擎,不断创新实现 一体化的TP、AP和多模融合的多工作负载, 从线下到云端,全面加速基于跨分布式数据的创新。2024年10月23日,OceanBase将在北......