- 博客(60)
- 收藏
- 关注
原创 Java中四种内部类的使用
匿名内部类就是局部内部类,只不过是局部内部类的一种特殊形式,其作用就是为了实现方法,实现之后直接调用即可。其中之所以p无法调用eat方法,是因为p的身份与指向是Person,父类无法调用子类方法。如上代码中Main方法里的XiaoMing无法直接使用。外部类可以通过完整类名直接访问静态内部类的静态成员。
2023-08-30 14:47:57
179
原创 抽象类与接口类的区别
抽象类归根结底是类,普通类的特征抽象类也具备,只能单继承接口可以多实现,接口中的方法除了default方法和static方法是没有方法体的在使用上区别并不大,都是偏向于顶层父类接口中所有的方法默认是public,域是public static,属性是static final的
2023-08-30 14:24:43
152
原创 Java中数组连续与不连续的情况
对于包含基本数据类型(如整数、浮点数、字符等)的数组,它们的地址通常是严格连续的。:如果数组中的元素是同一类型的对象,它们的地址也通常是严格连续的。这适用于大多数编程语言中的类、结构体或记录类型。:在一些编程语言中,静态数组是在编译时分配内存的,因此它们的地址是在编译时确定的,通常是严格连续的。
2023-08-30 14:22:57
509
原创 String类型的一些注意事项
字符串等值比较:对于引用类型比较的是地址,对于基本类型比较的是值,字符串比较时不要用等号比,用.equals()方法进行比较,先比较地址是否相同,相同直接返回true,不相同再比较长度是否相同,相同再比较内容。字符串(不可变字符串):地址不可变,如:若字符3写到地址333,则再将字符4赋给3所接收的变量,则地址改为4所在地址(创建新的空间),但3仍然存放再地址333下。实际上字符串拼接是把a与b的可变字符拼接后,new了一个新的对象,用新的字符串存拼接后的值(此时是false)
2023-08-30 14:12:54
94
原创 static关键字的使用以及静态方法的执行顺序详解
先执行父类Base的static修饰的代码块,然后执行子类static修饰的代码块,static执行完毕后,执行子类main方法发,new方法名以调用子类构造方法,但是由于默认super()存在,因此先调用父类构造方法,最后调用子类构造方法中的代码。static修饰的代码块都是在main类中执行的,是最早创建的一批空间(在创建类是顺带啊执行),可以用于构造方法之前执行进行初始化。static修饰的是独一份的东西,所以无论通过什么来修改static修饰的东西,其他使用该变量的其值都会改变。
2023-08-30 14:07:43
302
原创 设计模式详解-访问者模式
类型:行为型模式实现原理:使用了一个访问者类,将数据结构与数据操作分离作用:元素的执行算法可以随着访问者改变而改变解决的问题:稳定的数据结构和易变的操作耦合问题。解决方式:在被访问的类里面加一个对外提供接待访问者的接口。何时使用:需要对一个对象结构中的对象进行大量不同且不相关的操作,同时避免让这些操作"污染"这些对象的类实现核心:在数据基础类里面有一个方法接受访问者,将自身引用传入访问者。应用实例:面试的时候,考官是访问者,问我问题了解我。1、符合单一职责原则。2、易扩展。3、灵活。
2023-08-20 23:02:06
125
原创 设计模式详解-模板模式
类型:行为型模式实现原理:一个抽象类公开定义了执行它的方法的方式/模板,它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行意图:使子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。主要解决:一些通用却在每一个子类都重写了的方法造成的冗余解决方法:将这些通用算法抽象出来。何时使用:有一些通用的方法。实现核心:在抽象类实现,其他步骤在子类实现。应用实例: 盖楼需要地基、水管等优点: 1、封装不变部分,扩展可变部分。2、提取公共代码,便于维护。3、行为由父类控制,子类实现。
2023-08-20 23:00:59
127
原创 设计模式详解-策略模式
类型:行为型模式实现原理:定义了一系列算法或策略,并将每个算法封装在独立的类中,使得它们可以互相替换作用:可以在运行时根据需要选择不同的算法,而不需要修改客户端代码。解决的问题:在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护。解决方法:将这些算法封装成一个一个的类,任意地替换。何时使用:一个系统有许多许多类,而区分它们的只是他们直接的行为。关键代码:创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。
2023-08-20 23:00:05
140
原创 设计模式详解-状态模式
2、枚举可能的状态 3、一个类单独放与一个状态有关的行为,可以方便地增加新的状态,改变对象状态即可改变对象的行为。4、让多个环境对象共享一个状态对象,减少系统中对象的个数。在状态模式(State Pattern)中,类的行为是基于它的状态改变的。实现原理:创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。解决的问题:对象在不同状态下需要有不同的行为,而且这些行为可能会随着状态的改变而改变。作用:允许对象在内部状态发生改变时改变它的行为看起来好像修改了它的类。
2023-08-20 22:56:11
52
原创 设计模式详解-观察者模式
类型:行为型设计模式实现原理:定义了一种一对多的依赖关系,当一个对象的状态发生改变时,其所有依赖者都会收到通知并自动更新作用:当一个对象的状态发生改变时,通知并更新所有依赖于它的对象解决的问题:松耦合、一对多通知何时使用:当一个对象的状态发生变化时,需要通知其他对象,并且这些对象对变化有不同的反应和处理逻辑如何解决:使用面向对象技术,可以将这种依赖关系弱化。实现核心:在抽象类里有一个 ArrayList 存放观察者们。应用实例: 报纸订阅:当报纸的内容发生变化时,报社会通知所有的订户。
2023-08-20 22:55:24
72
原创 设计模式详解-备忘录模式
类型:行为型模式实现原理:在不破坏封装性的前提下,获取一个对象的内部状态,并在该对象之外保存这个状态作用:这样可以在以后将对象恢复到原先保存的状态。主要解决:对象状态的保存和还原问题何时使用:需要记录一个对象的内部状态,允许用户取消不确定或者错误的操作如何解决:通过一个备忘录类专门存储对象状态。实现核心:客户不与备忘录类耦合,与备忘录管理类耦合。应用实例:存档优点: 1、用户操作可撤回 2、操作方便缺点:消耗资源。
2023-08-20 22:53:57
37
原创 设计模式详解-中介者模式
类型:行为型模式实现原理:提供了一个中介类封装一系列的对象交互作用:将对象之间的通信转换为与中介者对象的通信,从而实现解耦。主要解决:传统方式中,每个对象直接和其他对象通信从而导致的对象之间的依赖关系复杂且难以维护的问题解决的方法:引入一个中介者对象何时使用:当一个对象的改变需要与其他多个对象进行交互时实现核心:对象 Colleague 之间的通信封装到一个类中单独处理。应用实例: MVC 框架优点:1、降低类的复杂度 2、提高解耦性缺点:中介者过于庞大时会变得复杂难以维护。
2023-08-20 22:53:03
43
原创 设计模式详解-迭代器模式
类型:行为型模式实现原理:提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。作用:用于顺序访问集合对象的元素,不需要知道集合对象的底层表示解决的问题:不同的方式遍历整个整合对象的问题何时使用:遍历一个聚合对象。解决的方法:让迭代器访问元素,而不是聚合对象。实现核心:定义接口:hasNext, next。应用实例:文件系统遍历优点: 1、支持以不同的方式遍历一个聚合对象。2、简化聚合类。3、在同一个聚合上可以有多个遍历。4、增加新的聚合类和迭代器类方便。
2023-08-20 22:50:22
82
原创 设计模式详解-解释器模式
类型:行为型模式实现原理:实现了一个表达式接口,该接口使用标识来解释语言中的句子作用:给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器来解释。主要解决:一些重复的固定文法分别创建解释器会很麻烦何时使用:某一种特定类型的问题发生的频率足够高解决的方法:构建语法树实现核心:构建环境类,包含解释器之外的一些全局信息,一般是 HashMap。应用实例:编译器、运算表达式计算。优点:1、易扩展 2、表达式解释方法增加 3、易于实现文法缺点: 1、可利用场景数量不确定。2、复杂文法难维护。
2023-08-19 20:32:34
545
原创 设计模式详解-命令模式
类型:行为型模式实现原理:请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。作用:可以用不同的请求对客户进行参数化解决的问题:行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。何时使用:要对行为进行"记录、撤销/重做、事务"等处理时解决的方法:通过调用者调用接受者执行命令,顺序:调用者→命令→接受者。
2023-08-19 20:27:18
55
原创 设计模式详解-责任链模式
类型:行为型模式实现原理:为请求创建了一个接收者对象的链。对请求的发送者和接收者进行解耦,每个接收者都包含对另一个接收者的引用,如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。作用:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。主要解决:职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递的问题如何解决:拦截的类都实现统一接口。
2023-08-19 20:25:42
301
原创 设计模式详解-代理模式
类型:结构型模式实现原理:创建具有现有对象的对象作用:为其他对象提供一种代理以控制对这个对象的访问。解决的问题:由于对象的访问条件不一,直接访问对象会造成麻烦问题解决问题的方法:增加中间层。何时使用:想在访问一个类时做一些控制。实现核心:实现与被代理类组合。应用实例:Windows 里面的快捷方式优点:1、分工明确。2、易扩展缺点:有些代理模式的实现非常复杂、有些代理模式可能会造成请求的处理速度变慢使用场景:按职责来划分,通常有以下使用场景: 1、远程代理。2、虚拟代理。
2023-08-19 20:21:04
503
原创 设计模式详解-享元模式
类型:结构型模式实现原理:尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象目的:减少创建对象的数量以减少内存占用和提高性能。解决的问题:大量的对象可能造成的内存溢出问题解决方法:用唯一标识码判断,如果在内存中有,则返回这个唯一标识码所标识的对象。何时使用:系统中有大量对象或者消耗大量内存的对象。实现核心:用 HashMap 存储这些对象。应用实例: 1、JAVA 中的 String,如果有则返回,如果没有则创建一个字符串保存在字符串缓存池里面。2、数据库的连接池。
2023-08-19 20:19:04
261
原创 设计模式详解-外观模式
类型:结构型模式实现原理:定义了一个高层接口,向现有的系统中的一组接口提供一致的界面目的:降低访问复杂系统的内部子系统时的复杂度,简化客户端之间的接口,使系统更加容易使用何时使用:简化复杂系统,方便操作解决方法:对客户端和系统解耦,让外观类与系统耦合关键代码:在客户端和复杂系统之间再加一层,这一层将调用顺序、依赖关系等处理好。应用实例:电脑操作系统优点: 1、解耦 2、灵活 3、安全缺点:不符合开闭原则,改东西麻烦,继承重写困难。使用场景:为复杂的模块或子系统提供外界访问的模块。
2023-08-19 20:17:32
326
原创 设计模式详解-装饰器模式
类型:结构型模式实现原理:装饰器模式通过将对象包装在装饰器类中,并在保持类方法签名完整性的前提下,提供额外功能作用:动态地给一个对象添加一些额外的职责。增加功能方面,装饰器模式比生成子类更灵活。解决的问题:为了扩展类,使用继承方式引入静态特征,而随着扩展功能的增多,子类发生膨胀。何时使用:在不想增加很多子类的情况下扩展类。解决方法:划分具体功能职责,并继承装饰者模式。关键代码:1、Component 类充当抽象角色,不应该具体实现。
2023-08-19 20:16:19
238
原创 设计模式详解-组合模式(整体部分模式)
类型:结构型模式特点:依据树形结构来组合对象,用来表示部分以及整体层次作用:模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦,使用户对单个对象和组合对象的使用具有一致性。何时使用:忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象。实现原理:树枝和叶子实现统一接口,树枝内部组合该接口。关键代码:在树枝内部组合该接口,并且含有内部属性 List,里面放 Component。应用实例:菜单和菜单项。
2023-08-19 20:11:01
431
原创 设计模式详解-过滤器模式(标准模式)
过滤器模式是一种结构型设计模式,它允许我们使用不同的条件从数据集合中筛选出满足特定条件的数据子集。它将筛选条件和数据集合分离,使得二者可以独立变化而互不影响。过滤器模式是一种简单而强大的软件设计模式,它可以帮助我们灵活地筛选数据,并将过滤条件与数据集合解耦。通过本篇博客的学习,读者可以了解到过滤器模式的基本概念、应用场景和实现方式,并通过实例演示掌握其具体使用方法。希望本文对您深入理解过滤器模式有所帮助,并能在实际开发中灵活运用。
2023-08-19 20:09:41
537
原创 设计模式详解-桥接模式
类型:结构型模式实现原理:将抽象类和实现类分离,使其独立,然后使用接口再将二者连接起来。意图:将抽象部分与实现部分分离,使它们都可以独立的变化。主要解决:类变化频繁时用继承可能会出现的类爆炸问题。如何解决:减少类的耦合关系,让类独立变化。应用实例: 汽车制造,抽象部分可以是车辆的基本属性和功能,而实现部分可以是具体型号的引擎,通过桥接模式,我们可以在不同型号的汽车上组合不同类型的引擎优点: 1、优秀的解耦性 2、优秀的扩展性缺点:会提高系统的设计与认知难度。
2023-08-19 19:45:17
271
原创 设计模式详解-适配器模式
适配器模式是一种非常常用且实用的设计模式,通过适配器类的封装,能够很好地实现两个不兼容接口之间的协同工作,提高代码的灵活性和复用性。在实际开发中,我们可以根据具体的需求,灵活运用适配器模式来解决接口不兼容的问题。
2023-08-11 00:00:27
80
转载 设计模式详解-原型模式
原型模式是一种创建型设计模式,通过复制现有对象来创建新对象。它提供了一种性能优化的方式,避免直接创建对象的开销。通过实现原型接口,我们可以在需要创建对象时返回其克隆。原型模式适用于资源优化、性能和安全要求高的场景,以及一个对象多个修改者的场景。
2023-08-10 23:38:22
99
转载 设计模式详解-建造者模式
在软件开发中,当我们需要创建一个复杂对象时,通常会面临许多参数和步骤。直接在代码中编写这些构建过程可能会导致代码臃肿、难以维护和可扩展性差。为解决这个问题,建造者模式应运而生。本文将介绍建造者模式的概念、结构和实际应用,并讨论其优点和适用场景。建造者模式是一种创建型设计模式,通过将对象的构建过程与实际表示分离,使得同样的构建过程可以创建不同的表示。它可以解决构建过程复杂、参数众多的问题,并可以灵活地生成不同的对象配置。一句话:使用多个简单的对象(Builder)一步一步构建成一个复杂的对象。
2023-08-08 22:44:37
35
原创 设计模式详解-抽象工厂模式
抽象工厂模式是一种常用的创建型设计模式,它提供了一种创建相关产品族的方式。产品族指的是由不同但相关的产品组成的一组对象,这些产品通常具有某种共同的特点或用途。抽象工厂模式通过将产品的创建过程封装在工厂类中,提供了一种统一的接口来创建不同类型的产品。抽象工厂模式是围绕一个核心工厂创建其他工厂。抽象工厂模式提供了一种创建相关产品族的灵活解决方案。它通过将产品的创建过程封装在工厂类中,提供了一种统一的接口来创建不同类型的产品。
2023-08-07 22:25:45
30
原创 设计模式详解-工厂模式
工厂模式是一种常用的创建型设计模式,通过封装对象的实例化过程,提供了一种统一的接口来创建不同类型的对象。它可以提高代码的可扩展性和可维护性,降低了代码的耦合度。
2023-08-07 21:37:29
27
原创 java设计模式详解-单例模式(2)
在本篇博客中,我们将探索三种常用的单例模式:双重检查锁、静态内部单例和枚举。的情况下,可能会出现空指针问题,出现问题的原因是JVM在实例化对象的时候会进行优化和指令重排序操作。枚举类实现单例模式是极力推荐的单例实现模式,因为枚举类型是线程安全的,并且只会装载一次,设计者充分的利用了枚举的这个特性来实现单例模式,枚举的写法非常简单,而且。:双重检查锁模式是一种非常好的单例实现模式,解决了单例、性能、线程安全问题,上面的双重检测锁模式看上去完美无缺,其实是存在问题,在。PS:枚举式属于饿汉式方式。
2023-08-07 20:40:40
38
原创 Java设计模式详解-单例设计模式(1)
单例设计模式是一种创建型设计模式,它通过限制类的实例化过程,保证在整个应用程序中只存在一个实例。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。单例设计模式是一种重要的设计模式,它可以确保一个类在整个应用程序中只有一个实例。通过合理地选择实现方式,我们可以灵活地应用单例模式来满足不同场景下的需求。然而,需要注意的是,在具体实现时要考虑并发安全性和延迟实例化的问题。
2023-08-04 11:38:48
39
原创 详解-手写RPC框架(8)-服务重试与服务MOCK
在RPC框架中,服务重试和模拟测试是提高系统稳定性和可靠性的关键策略。通过选择适当的重试策略、实施服务重试、利用模拟测试来评估和优化系统行为,可以有效地应对网络故障和其他异常情况,提高用户体验和系统可靠性。开发人员应根据具体需求和最佳实践,结合服务重试和模拟测试,精心构建和优化RPC框架,以确保系统的稳定性和性能。为了提高系统的稳定性和可靠性,在RPC框架中实施服务重试和模拟测试是关键策略。当服务连接不上时,可以尝试设置多次重新连接,连接不同的URL,直到重连机会用完或者连接通过。
2023-08-04 01:53:38
185
原创 详解-手写RPC框架(7)- 服务容错
服务容错是手写RPC框架中的重要组成部分,用于处理服务调用中可能出现的错误或异常情况。通过引入重试策略、熔断策略、降级策略和舱壁隔离策略等机制,可以提高系统的可用性和稳定性。在实现过程中,需要根据具体的需求和场景选择适合的服务容错策略,并在代码中添加相应的逻辑来实现。
2023-08-04 01:18:38
254
原创 Java并发编程-锁的升级过程
锁是Java并发编程中常用的同步机制,它通过提供互斥访问的能力,确保多个线程在访问共享资源时的有序性和安全性。在Java中,常用的锁包括synchronized关键字、ReentrantLock类以及读写锁等。锁在Java并发编程中起着至关重要的作用,它能够保证多个线程对共享资源的安全访问。锁的升级过程从偏向锁到轻量级锁再到重量级锁,旨在根据竞争情况和线程数量来提供最佳的性能和效果。
2023-08-04 00:13:38
139
原创 Java设计模式概述
本篇博客概述了常见的Java设计模式的分类和提供了相应的类图示例。不同的设计模式解决了不同类型的问题,可以提高代码的可重用性、灵活性和可维护性。在实际开发中,我们根据具体场景选择适合的设计模式来构建高质量的软件系统。
2023-08-02 23:04:13
29
原创 详解-手写RPC框架(5.5)-注册中心实现的三个机制
在手写RPC框架中,注册中心实现了共享机制、心跳机制和监听机制来确保服务提供者信息的存储和共享、健康状态的监测以及变化的监听。通过共享机制,服务提供者的信息可以被多个节点访问和更新;通过心跳机制,注册中心可以判断服务提供者的健康状态;通过监听机制,消费者可以实时获取最新的服务提供者列表。这三个机制协同工作,使得分布式系统能够实现高效、稳定和可扩展的服务注册、发现和路由。
2023-08-02 00:14:11
300
原创 详解-手写RPC框架(6)-负载均衡
负载均衡是指将请求平均地分布到多个服务器上,以避免单一服务器过载而导致性能下降或故障。通过负载均衡,我们可以提高系统的吞吐量和响应时间,同时保证每个服务器的负载相对均衡。一句话:解决调用者同时向服务提供者发送多个请求的情况。
2023-08-01 23:49:49
85
原创 详解-手写RPC框架(5)-服务注册与发现
服务注册与发现是指将服务提供者注册到某个中心,并使服务消费者能够发现和调用这些服务的过程。服务注册是将服务提供者的信息(如IP地址、端口号、服务接口等)注册到服务注册中心,而服务发现则是服务消费者从注册中心获取可用服务提供者的信息,以便进行远程调用。
2023-08-01 23:23:41
638
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人