![](https://img-blog.csdnimg.cn/20190927151043371.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
JAVA
文章平均质量分 57
JAVA各类关联技术
追逐路上的小人物
没有
展开
-
JAVA设计模式-职责链模式
2) ConcreteHandlerA , B 是具体的处理者, 处理它自己负责的请求, 可以访问它的后继者(即下一个处。1) Handler : 抽象的处理者, 定义了一个处理请求的接口, 同时含义另外Handler。理者), 如果可以处理当前请求,则处理,否则就将该请求交个 后继者去处理,从而形成一个职责链。传统方式是:接收到一个采购请求后,根据采购金额来调用对应的。总结:if判断的做成接口,传入和处理 用接口解耦。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依。原创 2022-11-07 01:07:13 · 693 阅读 · 1 评论 -
JAVA设计模式-策略模式
说明:从上图可以看到,客户context 有成员变量strategy或者其他的策略接口。的问题,其实是继承带来的问题:对类的局部改动,尤其超类的局部改。比如 野鸭、北京鸭、水鸭等, 鸭子有各种行为,比如 叫、飞行等。互相替换,此模式让算法的变化独立于使用算法的客户。,至于需要使用到哪个策略,我们可以在构造器中指定.)中,定义算法族,分别封装起来,让他们之间可以。让所有子类都会飞了,这是不正确的。动,会影响其他部分。问题又来了,如果我们有一个玩具鸭子。总结:方法和类都分开。问题,我们可以通过覆盖。原创 2022-11-07 00:49:33 · 580 阅读 · 0 评论 -
JAVA设计模式-状态模式
3) ConcreteState 具体的状态角色,每个子类实现一个与Context 的一个状态相关行为。2) State 是抽象状态角色,定义一个接口封装与Context 的一个特点接口相关行为。1) Context 类为环境角色, 用于维护State实例,这个实例定义当前状态。当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了。输出不同的行为的问题。状态和行为是一一对应的,状态之间可以相互转换。):它主要用来解决对象在多种状态转换时,需要对外。原创 2022-11-07 00:22:23 · 1194 阅读 · 0 评论 -
JAVA设计模式-解释器模式
2) AbstractExpression: 抽象表达式, 声明一个抽象的解释操作,这个方法为抽象语法树中所有的节点所。4) NonTermialExpression: 为非终结符表达式,为文法中的非终结符实现解释操作.编写一个方法,接收表达式的形式,然后根据用户输入的数值进行解析,得到结果。应用可以将一个需要解释执行的语言中的句子表示为一个抽象语法树。的一种表示,并定义一个解释器,使用该解释器来解释语言中的句子。构建语法分析树,最终形成一颗抽象的语法分析树。一些重复出现的问题可以用一种简单的语言来表达。原创 2022-11-06 16:25:49 · 116 阅读 · 0 评论 -
JAVA设计模式-备忘录模式
一个对象,就对应一个保存对象状态的对象, 这样当我们游戏的对象很多时,不。可以这里理解备忘录模式:现实生活中的备忘录是用来记录某些要去做的事情,部状态,并在该对象之外保存这个状态。或者是记录已经达成的共同意见的事情,以防忘记了。模式有着相同的含义,备忘录对象主要用来记录一个对象的某种状态,或者某。些数据,当要做回退时,可以从备忘录对象里获取原来的数据进行恢复操作。后攻击力和防御力下降,从备忘录对象恢复到大战前的状态。)在不破坏封装性的前提下,捕获一个对象的内。这个新对象,但这就暴露了对象内部的细节。原创 2022-11-06 15:28:54 · 745 阅读 · 0 评论 -
JAVA设计模式-中介者模式
底层各个获取资源的 各自为类,没有关联。当系统增加一个新的电器对象时,或者执行流程改变时,代码的可维护性、扩展性。主人要看电视时,各个设备可以协同工作,自动完成看电视的准备工作,比如流。中介者使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立。程为:闹铃响起->咖啡机开始做咖啡->窗帘自动落下->电视机开始播放。当各电器对象有多种状态改变时,相互之间的调用关系会比较复杂。智能家庭包括各种设备,闹钟、咖啡机、电视机、窗帘 等。,用一个中介对象来封装一系列的对象交互。各个电器对象彼此联系,原创 2022-11-04 22:05:57 · 225 阅读 · 0 评论 -
JAVA设计模式-观察者模式
气象站可以将每天测量到的温度,湿度,气压等等以公告的形式发布出去。中,当增加一个第三方,都需要创建一个对应的第三方的公告板。通知所有的注册的用户,根据不同需求,可以是更新数据,让用。总结:当一对多是,使用观察者模式。,便于其他第三方也能接入气象站获取数据。观察者模式设计后,会以集合的方式来管理用户。测量数据更新时,要能实时的通知给第三方。户来取,也可能是实施推送,看具体需求定。其他第三方接入气象站获取数据的问题。观察者原理:登记注册、移除、通知。提供温度、气压和湿度的接口。这样,我们增加观察者。原创 2022-11-01 22:15:28 · 110 阅读 · 0 评论 -
JAVA设计模式-迭代器模式
将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分。迭代器模式,提供一种遍历集合元素的统一接口,用一致的方法遍历集合元素,方式,而且还会暴露元素的内部结构,可以考虑使用迭代器模式解决。是 :在一个页面中展示出学校的院系组成,一个学校有多个。不需要知道集合对象的底层表示,即:不暴露其内部的结构。学院,一个学院有多个系, 因此这种方案,不能很好实现。)是常用的设计模式,属于行为型模式。或者还有其他方式,当客户端要。总结:解决元素存储类型不同。总结:方法和数据 隔离。原创 2022-10-29 22:11:51 · 139 阅读 · 0 评论 -
JAVA设计模式-访问者模式
扩展性不好,比如 增加了 新的人员类型,或者管理方法,都不好做。它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。的,但是考虑系统增加越来越多新的功能时,对代码改。,封装一些作用于某种数据结构的各元素的操作,需要对一个对象结构中的对象进行很多不同操作。在被访问的类里面加一个对外提供接待访问者。主要将数据结构与数据操作分离,解决。引出我们会使用新的设计模式。,同时需要避免让这些操作。如果系统比较小,还是。这些操作彼此没有关联。原创 2022-10-29 21:19:04 · 104 阅读 · 0 评论 -
JAVA设计模式-命令模式
我们买了一套智能家电,有照明灯、风扇、冰箱、洗衣机,我们只要在手机上安装。控制所有智能家电的需要,则每个智能家电厂家都要提供一个统一的接口。1) 我们只需在程序运行时指定具体的请求接收者即可,此时,可以。这些智能家电来自不同的厂家,我们不想针对每一种家电都安装一个。向某些对象发送请求,但是并不知道请求的接收者是谁,也不知。在命名模式中,会将一个请求封装为一个对象,以便使用不同参。,动作的执行者是每个厂商的一个家电产品。在我们的例子中,动作的请求者是手机。,同时命令模式也支持可撤销的操作。原创 2022-10-29 20:33:40 · 292 阅读 · 0 评论 -
记录获取1024勋章
记录获取1024勋章。原创 2022-10-24 10:05:12 · 175 阅读 · 0 评论 -
JAVA设计模式-模板模式
2、简单说,模版方法模式定义一个操作中的算法的骨架。而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构,就可以重定义该算法的某些特定步骤。1、模版方法模式,又叫模版模式,在一个抽象类公开定义了执行他的方法的模板,它的子类可以按需重新方法实现,单调用将抽象类中定的方式进行。3.1、在模版方法模式的父类中,我们可以定一个方法。选材、浸泡和放到豆浆机打碎这几个步骤对于制作每种口味的豆浆都是一样的。,因此就直接使用,不再使用传统的方案来引出模板方法模式。通过添加不同的配料,可以制作出不同口味的豆浆。原创 2022-10-16 23:46:35 · 1204 阅读 · 0 评论 -
JAVA设计模式-代理模式
1)代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。2)被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象3)代理模式有不同的形式,主要有三种静态代理、动态代理(JDK代理、接口代理)和Cglib代理(可以在内存动态的创建对象,而不需要实现接口, 他是属于动态代理的范畴)。4)代理模式示意图。原创 2022-10-16 23:21:34 · 147 阅读 · 0 评论 -
JAVA设计模式-享元模式
像数据库连接池,里面都是创建好的连接对象,在这些连接对象中有我们需要的则直接拿来用,避免重新创建,如果没有我们需要的,则创建一个。享元模式能够解决重复对象的内存浪费的问题,当系统中有大量相似对象,需要缓冲池是,不需要总是创建新对象,可以从缓冲池里面拿。1、FlyWeight 是抽象的享元角色,它是产品的抽象类,同时定义出对象的外部状态和内部状态 的接口和实现。6、外部状态:指对象的已依赖的一个标记,是随环境改变而改变的,不可共享的状态。处理,相当于一个相同网站的实例对象很多,造成服务器的资源浪费。原创 2022-10-16 19:05:11 · 459 阅读 · 0 评论 -
JAVA设计模式-外观模式
有多个接口调用,且有一定的流程。不用直接聚合各个接口。抽象出来一个类型。去实习流程逻辑。让客户端对接抽象流程。原创 2022-10-16 18:16:36 · 116 阅读 · 0 评论 -
JAVA设计模式-组合模式
2.1、组合模式,又叫部分整体模式,它创建了对象组的树形结构。将对象组合成树状结构以表示“整体-部分”的层次关系2.2、组合模式依据树形结构来组合对象。用来表示部分以及整体层次2.3、这种类型的设计模式属于结构型模式2.4、组合模式使得用户对单个对象和组合对象的访问具有一致性即:组合能让客户以一致的方式处理个别对象以及组合对象2、Leaf;在组合中表示叶子节点,叶子节点没有子节点3、Composite:非叶子节点,用户存储子部件, 在Component接口中实现子部件的相关操作,比如增加,删除。原创 2022-10-16 17:45:40 · 393 阅读 · 0 评论 -
JAVA设计模式-装饰者模式
1、装饰者模式:动态的将新功能、、附加到对象上。在对象功能扩展方面。它比继承更有弹性。装饰者模式也体现了开闭原则(OCP)2、装饰则模式原理2.1、装饰者模式就想打包一个快递主体:陶瓷,衣服(Component)//被装饰者包装:报纸填充,塑料泡沫,纸板,木板 (Decorator)主体:比如类似前面的Drink2.3、ConcreteComponent和DecoratorConcreteComponent:具体的主体,比如前面的各个单品咖啡Decorator:装饰者,比如各调料。原创 2022-10-16 16:54:30 · 472 阅读 · 0 评论 -
JAVA设计模式-桥接模式
2.1、桥接模式(Bridge)是指,将实现与抽象放在两个不同类层次中,使两个层次可以独立改变2.2、是一种结构性设计模式2.3、Bridge模式基于类的最小设计原则,通过使用封装,聚合及继承等行为让不同的类承担不同的职责,它的主要特点是把抽象(Abstraction)与行为实现分离开来。从而可以保持各部分的独立性以及应对他们的功能扩展}@OverrideSystem.out.println("Vivo手机开机");}@Override。原创 2022-10-11 23:27:49 · 326 阅读 · 0 评论 -
JAVA设计模式-适配器模式
1.1、适配器模式将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原币因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器1.2、适配器模式属于结构性模式1.3、主要分为三类:类适配器模式、对象适配器模式、接口适配器模式。原创 2022-10-11 00:24:36 · 929 阅读 · 0 评论 -
JAVA设计模式-建造者模式
2.1、建造者模式又叫生成器模式,是一种对象构建模式。它可以将复制对象的建造过程抽象出来。使这个抽象过程的不同实现方法可以构造出不同表的对象2.2、建造这模式是一步一步创建一个复杂的对象。它允许用户通过指定复杂对象的类型和内容就可以构建他们,用户不需要知道内部的具体构造细节2.3、建造者模式的四个角色Product(产品角色):一个具体的产品对象Builder(抽象建造者):创建一个Product对象的各个部件指定的接口ConcreteBuilder(具体建造者):实现接口,构建和装配各个部件。原创 2022-10-08 00:06:31 · 266 阅读 · 0 评论 -
JAVA设计模式-原型模式
用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象。原型模式是一种创建型设计模式,允许一个对象再创建另外一个可定制的对象,无需知道如何创建的细节工作的原理是:通过将一个原先对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。即;对象.clone()}}}}}}}}@Override'}';}/*** 克隆该实例,使用默认的clone方法* @return*/@Overridetry{}原创 2022-10-07 17:09:02 · 78 阅读 · 0 评论 -
JAVA设计模式-工厂设计模式
1、简单工厂模式是由一个工厂对象决定创建出那一种产品类的实例。2、定了一个创建对象的类,由这个类来封装实例化对象的行为3、当我们会用到大量的创建某种,某类或者某批对象时,就可以使用工厂模式3、使用简单工厂模式/*** 简单工厂类 也叫静态工厂模式* 简单工厂模式就是把 逻辑里生成实例的代码抽取到工厂里面。返回实例。* 在实现的方法里面,只处理实例的方法。这样就不会污染实现实例的方法。*///更具orderType 返回Pizza。原创 2022-10-06 17:22:33 · 427 阅读 · 0 评论 -
设计模式类型(23种)
目录1、创建型模式1.1、单例模式1.2、抽象工厂模式1.3、原型模式1.4、建造者模式1.5、工程模式2、结构型模式2.1、适配器模式2.2、桥接模式2.3、装饰模式2.4、组合模式2.5、外观模式2.6、享元模式2.7、代理模式3、行为型模式3.1、模版方法模式3.2、命令模式3.3、访问者模式3.4、迭代器模式3.5、观察着模式3.6、中介者模式3.7、备忘录模式3.8、解释器模式3.9、状态模式3.10、策略模式3.11、职责链模式(责任链模式)原创 2022-10-06 16:00:23 · 350 阅读 · 0 评论 -
UML类图
聚合关系表示的是整体和部分的关系,整体与部分可以分开。聚合关系是关联关系的特例。3、动态行为图:交互图(时序图与协作图)、状态图、活动图。4、类图是描述类与类之间的关系的,是UML图中最核心的。关联关系实际上就是类与类之间的关系,他是依赖关系的特例。2、静态结构图:类图、对象图、包图、组件图、部署图。实现关系实际上就是A类实现B类,他是依赖关系的特例。4、类图-关联关系(Association)也是整体与部分的关系,但是整体与部分不可以分开。依赖、泛化(继承)、实现、关联、聚合和组合。原创 2022-10-06 15:47:01 · 446 阅读 · 0 评论 -
设计模式-七大原则
5.1、一个软件实体如类,模块和函数应该对扩展开发,对修改关闭,用抽象构造框架,用实现扩展细节(功能扩展的时候,类可以增加,但是实现方法代码不变)各个类实现抽象,抽象作为参数,实现参数的类作为传值。5.2、当软件需要变化时,经量通过扩展软件实体的行为来实现变化,而不是通过已有代码来实现变化。客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上。3.1、高层模块(客户端)不应该依赖底层模块(实现类),二者都应该依赖起抽象。(可用接口作为参数,传入参数时,用实现该接口的类传参数)原创 2022-10-05 20:18:18 · 415 阅读 · 0 评论 -
JVM分析GC日志
在显示完区域容量GC的情况之后,会接着显示整个堆内存区域的GC情况:GC前堆内存已使用容量->GC后堆内存容量(堆内存总容量),并且堆内存总容量 = 9/10 新生代 + 老年代,然后堆内存总容量肯定小于初始化的内存大小。它不区分新生代还是老年代GC,括号里的内容是gc发生的原因,这里的Allocation Failure的原因是新生代中没有足够区域能够存放需要分配的数据而失败。PSYoungGen:表示GC发生的区域,区域名称与使用的GC收集器是密切相关的。如果是老年代,总容量则是全身内存大小,无变化。原创 2022-09-28 22:39:16 · 506 阅读 · 0 评论 -
JVM运行时参数
作为HotSpot中Client 模式下的默认新生代垃圾收集器,Serial Old是运行在Client模式下默认的老年代的垃圾回收器。5.4.4、Parallel回收器(并行 jDK默认垃圾收集器,主打吞吐量)5.4.5、CMS回收器(并发,垃圾回收线程,和用户线程,JDk1.5开启)5.4.2、Serial回收器(串行)5.4.3、Parnew回收器(并行)5.2、堆、栈、方法区等内存大小设置。5.4.1、查看默认的垃圾回收器。5.4、垃圾收集器相关选项。5.4.6、G1回收器。4.1、在运行时添加。原创 2022-09-25 23:43:52 · 290 阅读 · 0 评论 -
内存泄漏概念
这种情况下,即使在contains方法使用该对象的当前引用作为的参数去HashSet中集合中检索对象,也将返回找不到对象的结果。改变哈希值,当一个对象被存储进HashSet集合中以后,就不能修改这个对象中那些参与计算哈希值的字段了,否则,对象修改后的哈希值与最初存储进行HashSet集合中时的哈希值就不同了。单例模式生命周期和JVM一样长,如果持用外包对象的引用,那么这个外部对象也不会被回收,那么就会造成内存泄露。内部类持有外部类,如果一个外部类的实例对象的方法返回一个内部类的实例对象,原创 2022-09-24 22:49:23 · 528 阅读 · 0 评论 -
JVM调优(一)之性能优化步骤
在GC中:运行用户代码的时间占总运行时间的比例(总运行时间:程序的运行时间+内存回收的时间)1-1/(1+n)暂停时间:执行垃圾收集时,程序的工作线程被暂停的时间。2.3、dump出堆文件,使用内存分析工具分析文件。3.5、使用中间件提高程序效率。2.4、使用JVisuamVM实时查看JVM状态。3.1、适当增加内存,根据业务背景选择垃圾回收器。3.2、优化代码,控制内存使用。3.3、增加机器,分散节点压力。3.4、合理设置线程池线程数量。1.6、程序响应时间较长。4.5、相互间的关系。原创 2022-09-03 15:23:59 · 244 阅读 · 0 评论 -
java中常用的设计模式
一、设计模式的七大原则1)单一职责原则 ----设置类的时候 对类来说。一个类只做一件事。即一项职责。例如。一个dao 操作用户表又操作订单表。可这就有两个。所有可以划分为用户dao和订单dao.。降低类的复杂度2)接口隔离原则-----设置接口的时候 客户端不要依赖他不需要的接口。即一个类对另一个类的依赖应该建立在最小的接口上。例如:一个接口里有多个方法。但是可能多个类实现这个方法。但是有些方法别的类又不用。这就不符合接口隔离原则。所以需要把接口拆成几个独立的类...原创 2022-03-11 12:24:17 · 285 阅读 · 0 评论 -
各个技术的原理总结
1、线程池的原理2、nacos的原理3、sentlener 限流的原理4、currentHashMap的原理5、redis的原理6、spring的原理7、springmvc的原理8、mybatis的原理9、主从复制。读写分离的原理10、jvm的原理11、srpingboot的原理12、es的原理...原创 2022-03-08 12:50:07 · 1929 阅读 · 0 评论 -
JUC-BlockingQueue
阻塞队列,就是相当于给你预估值,这些值,阻塞队列给你处理一、阻塞队列当队列是空的,从队列中 获取 元素的操作将会被阻塞当队列是满的,从队列中 添加 元素的操作将会被阻塞试图从空的队列中获取元素的线程将会被阻塞,直到其他线程往空的队列插入新的元素试图向已满的队列中添加新元素的线程将会被阻塞,直到其他线程从队列中移除一个或多个元素或者完全清空,使队列变得空闲起来并后续新增二、用处在多线程领域:所谓阻塞,在某些情况下会 挂起 线程(即阻塞),一旦条件满足,被挂起的线程又会自动 ..原创 2022-02-11 21:10:22 · 107 阅读 · 0 评论 -
JUC-ReadWriteLock
一、作用重点保证数据的一致性二、代码package com.cb.demo.example;import java.util.HashMap;import java.util.Map;import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.ReadWriteLock;import java.util.concurrent.locks.ReentrantReadWriteLock;class原创 2022-02-11 20:27:38 · 132 阅读 · 0 评论 -
JUC -辅助类
一、CountDownLatch(倒计时) 等待所有线程跑完后返回值* CountDownLatch主要有两个方法,当一个或多个线程调用await方法时,这些线程会阻塞。* 其它线程调用countDown方法会将计数器减1(调用countDown方法的线程不会阻塞),* 当计数器的值变为0时,因await方法阻塞的线程会被唤醒,继续执行。代码:package com.cb.demo.example;import java.util.concurrent.Cou...原创 2022-02-11 19:55:48 · 201 阅读 · 0 评论 -
JUC-Callable
一、是什么是获得多线程的方式之一还有实现Runnabe、继承Thread类二、怎么用package com.cb.demo.example;import org.omg.PortableServer.THREAD_POLICY_ID;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.FutureTask;原创 2022-02-11 19:31:42 · 1301 阅读 · 0 评论 -
JAVA-集合
1、不安全ArrayList、HashSet、HashMap不安全的2、原因ArrayList 的add()方法没加synchronized (同步锁)关键字HashSet 的底层原理是HashMap,add方法调用的就是map的put方法,key就是add的元素,值是Object常量3、会出现的错误java.util.ConcurrentModificationException //并发异常4、解决1)Vector()使用Vector()方法 add方法加了syn原创 2022-02-11 17:18:24 · 216 阅读 · 0 评论 -
JAVA-8锁
例子:package com.cb.demo.example;import java.util.concurrent.TimeUnit;class Phone{ public static synchronized void sendEmail()throws Exception { //暂停一会4秒 try{TimeUnit.SECONDS.sleep(4);}catch(InterruptedException e){e.printStack原创 2022-02-09 11:25:08 · 492 阅读 · 0 评论 -
Lamdba
口诀:拷贝小括号,写死右箭头,落地大括号不关心接口里面方法,因为只对有且仅有一个方法的接口奇效,当一个接口里面有且一个方法,底层代码会自动添加@FunctionalInterface (函数式接口)1、常见写法 Foo foo = new Foo(){ @Override public void sayHell0() { System.out.println("hello.....");原创 2022-02-08 16:46:06 · 310 阅读 · 0 评论 -
JUC(1)
1、JUC是什么全称:java.util.concurrent 在并发编程中使用的工具类2、进程/线程是什么进程:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。线程:通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义。线程可以利用进程所拥有的资源,在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单原创 2022-02-06 16:17:51 · 284 阅读 · 0 评论 -
JMM(Java Memory Model)
volatile是Java虚拟机提供的轻量级的同步机制保证可见性不保证原子性禁止指令重排一、是什么是一种抽象的概念并不真实存在,它描述的是一组规则或规范,通过这组规范定义来了程序中各个变量的访问方式二、特点1、可见性2、原子性3、有序性三、原理由于JVM运行程序的实体是线程,而每个线程创建时JVM都会为其创建一个工作内存,工作内存是每个线程的私有数据,而Java内存模型中规定所有变量都存储在主内存,主内存是共享内存区域,所有线程都可以访问,但线程对变量的操作(读取原创 2022-02-04 22:37:49 · 311 阅读 · 0 评论