JAVA设计模式
文章平均质量分 86
设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理解
Java语录精选
作者是一名经验丰富的Java开发工程师,拥有6年开发经验。擅长Java企业级应用程序开发,擅长多种流行框架和技术,如Spring、MyBatis、微服务框架等。具有扎实的Java基础,熟悉面向对象编程原理、多线程编程、网络编程、数据结构和算法等核心知识。曾参与过多个大型项目的开发,负责过需求分析、系统设计、编码实现、单元测试、部署上线等工作。有较强的沟通能力,能与团队成员紧密协作,按时高质量地完成开发任务。对代码质量、代码重构和设计模式有较深的理解和实践经验。
展开
-
MyBatis中经典的五种设计模式源码剖析,打死都不要忘记!
MyBatis 3.5版本中也广泛使用了多种设计模式,下面是其中一些主要使用的设计模式。原创 2024-03-15 17:18:59 · 1496 阅读 · 0 评论 -
Spring中经典的7种设计模式源码分析
AbstractBeanFactory作为抽象基类,定义了getBean()方法的模板实现。原创 2024-03-14 17:14:13 · 1443 阅读 · 0 评论 -
Java集合中经典的 5种设计模式,打死也要记住啊!
Java 集合框架中的 List、Set、Map 以及其实现类都使用了多种经典的设计模式。原创 2024-03-13 17:18:31 · 975 阅读 · 0 评论 -
Java访问者模式源码剖析及使用场景
Java 中的访问者(Visitor)模式是一种行为型设计模式,它将数据结构与数据操作分离,使得在不修改数据结构的情况下可以增加新的操作。抽象访问者(Visitor): 定义了一个访问具体元素的接口,为每个具体元素类声明一个访问操作。具体访问者(ConcreteVisitor): 实现了抽象访问者角色所声明的接口,定义了相应的访问操作。抽象元素(Element): 声明一个接受访问操作的接口,这个接口的入口参数是抽象访问者角色。具体元素(ConcreteElement)原创 2024-03-13 10:44:52 · 1208 阅读 · 0 评论 -
Java责任链模式源码剖析及使用场景
责任链模式是一种行为设计模式,它允许你将请求沿着处理者链进行传递,直到有一个处理者能够处理该请求。在这个模式中,每个处理者都包含对下一个处理者的引用,当收到请求时,它可以选择自行处理请求或者将请求传递给下一个处理者。Java 中的责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它通过给多个对象处理请求的机会,从而避免了请求的发送者与接收者之间的耦合关系。该模式将接收对象的对象连接成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。原创 2024-03-12 16:36:18 · 1175 阅读 · 0 评论 -
Java策略模式源码剖析及使用场景
策略模式是一种行为型设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以相互替换。策略模式让算法的变化独立于使用算法的客户端。策略模式的主要角色有Context(上下文): 负责维护一个具体的策略类实例,并根据它来协调算法的执行。Strategy(抽象策略): 定义了一个算法族,声明了一个算法的操作,它有一个或多个具体的策略类实现。ConcreteStrategy(具体策略): 具体实现了 Strategy 接口定义的算法。策略模式的优点算法可以在运行时进行切换,避免了使用复杂的条件语句。原创 2024-03-12 11:42:40 · 1324 阅读 · 0 评论 -
Java状态模式源码剖析及使用场景
状态模式(State Pattern)是一种行为型设计模式,它允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。状态模式的核心思想是将对象的状态封装成独立的类,使得对象可以根据自身的状态来获取不同的行为。当对象的内部状态发生改变时,其行为也会随之改变。Context(上下文): 定义客户感兴趣的接口,并维护一个具体状态类的实例。State(状态): 这是一个抽象状态类,它定义了一个与Context的一个或多个行为相关的接口。ConcreteState(具体状态)原创 2024-03-11 17:29:36 · 1285 阅读 · 0 评论 -
Java解释器模式源码剖析及使用场景
解释器模式(Interpreter Pattern)是一种行为型设计模式,它为语言元素定义了一种表示方式,并定义了一种解释器用于解释这些元素的方式。解释器模式的主要作用是构建一个解释器,用于解释特定的语言或语法。这种语言可以是编程语言、脚本语言或者是任何其他特定领域的语言。抽象表达式(AbstractExpression): 声明一个抽象的解释操作,这是所有终结符表达式和非终结符表达式所共有的接口。终结符表达式(TerminalExpression): 实现与文法中的终结符相关的解释操作。原创 2024-03-11 16:36:40 · 1164 阅读 · 0 评论 -
Java备忘录模式剖析及使用场景
备忘录模式是一种行为设计模式,它允许在不破坏对象封装性的前提下,捕获并外部化一个对象的内部状态,以便日后可以恢复该对象到之前保存的状态。假设你在玩一个电子游戏,游戏中有一个保存进度的功能。当你保存游戏时,实际上是将游戏的当前状态(比如关卡、分数、生命值等)存储到一个对象(备忘录)中。当你想恢复到保存的进度时,游戏只需从备忘录对象中读取相关数据,从而将自身恢复到之前的状态。有个3个角色发起者(Originator):需要保存和恢复状态的对象。备忘录(Memento):用于存储发起者对象的内部状态。原创 2024-03-10 23:43:54 · 1006 阅读 · 0 评论 -
Java中介者模式剖析及使用场景
介者模式是一种行为型设计模式,它允许对象之间通过一个中介者对象进行通信,而不是直接相互引用。将多对多的关系转化为一对多的关系,对象之间不再直接相互通信,而是通过中介者进行通信,降低了对象之间的耦合度。就好像在一个团队中,每个人都不直接与其他成员交流,而是通过一个团队领导来协调沟通。这样做可以有效减少成员之间的关联,提高系统的灵活性和可维护性下面4个关键,同事对象的状态发生变化时,它会通知中介者,中介者可以根据需要向其他同事对象发送消息或者执行特定的操作。原创 2024-03-10 22:54:42 · 1002 阅读 · 0 评论 -
Java观察者模式源码剖析及使用场景
解耦合:观察者模式将主题和观察者解耦,主题不需要知道观察者的具体实现,只需要维护一个观察者列表并通知它们。可扩展性好:可以方便地添加新的观察者,而无需修改主题代码。支持广播通信:主题可以向多个观察者对象发送通知,实现一对多的通信模式。原创 2024-03-10 21:31:42 · 1026 阅读 · 0 评论 -
Java迭代器模式源码剖析及使用场景
迭代器模式提供一种顺序访问集合对象元素的方法,而不需要暴露集合对象的内部表示。迭代器模式可以让不同的集合对象使用统一的迭代接口,从而避免了对集合对象的复杂操作。比如你要清点家里的物品,不同的房间里有不同的物品,但是你只需要一个标准的清点流程(迭代器),就可以清点不同房间里的物品,而不用关心每个房间的具体物品安排。支持不同的遍历方式,迭代器模式简化了遍历操作迭代器模式和集合类相分离,有利于增加新的集合类迭代器模式适用于访问集合元素的多态性对于非常大的数据集合,使用迭代器遍历效率较低。原创 2024-03-10 14:48:03 · 417 阅读 · 0 评论 -
Java命令模式源码剖析及使用场景
低耦合,命令发送者和执行者完全解耦可以将命令存入队列,实现撤销/恢复操作命令对象可以携带额外的执行信息新增新命令非常方便,无需修改现有代码可能会导致系统有过多的具体命令类命令对象本身冗长适用于需要将操作请求作为对象进行参数化传递的场景适用于需要支持命令队列、命令记录日志、撤销/恢复操作等功能的场景可以考虑使用组合模式组合多个命令形成复合命令在设计阶段就应该考虑是否需要支持撤销/恢复操作命令模式可以为不同对象的相同操作提供统一的接口。原创 2024-03-10 14:25:09 · 870 阅读 · 0 评论 -
Java模板方法模式源码剖析及使用场景
封装不变部分,扩展可变部分,代码复用性好父类调用子类操作,通过子类扩展增强功能符合开闭原则和里氏替换原则每个不同的实现都需要定义一个子类,类的个数可能过多父类和子类之间存在潜在的扩展性限制编写过程复杂,逻辑较难理解适用于复杂流程,有固定不变的算法骨架和某些可变的细节需要先分清楚算法固定部分和可变部分体现了模板模式的核心思想"继承 + 多态"在框架设计中是常用的模式,可以提高代码的复用性不建议过度使用,需要权衡利弊,避免类膨胀。原创 2024-03-10 13:41:47 · 828 阅读 · 0 评论 -
Java享元模式源码剖析及使用场景
享元模式是一种结构型设计模式,旨在最大程度地减少内存使用或计算开销。这种模式通过共享对多个类似对象实例所需的状态来实现这一目标。原创 2024-03-09 18:36:24 · 501 阅读 · 0 评论 -
Java组合模式在项目中使用场景
将对象组合成树形结构以表示“部分-整体”的层次关系。组合模式使得用户对单个对象和组合对象的使用都是相同的。Component(组件):定义了叶子节点和组合节点的公共接口,可以包含一些默认的行为或属性。Leaf(叶子节点):表示树中的叶子结点对象,叶子结点没有子节点。Composite(组合节点):表示树中的组合结点对象,它可以拥有子节点,并且实现了与 Component 相关的操作。原创 2024-03-09 17:57:17 · 575 阅读 · 0 评论 -
Java桥接模式源码剖析及使用场景
它的主要目的是将抽象化与实现化分离,使得二者可以独立变化,就像一个桥,将两个变化维度连接起来。各个维度都可以独立的变化。故称之为:桥接模式桥接模式的核心在于通过一个桥接接口,将抽象部分与实现部分解耦。这样做的好处是显而易见的,当系统中的某个维度(抽象或实现)需要变更时,不会影响到另一个维度。抽象化角色(Abstraction):它是抽象类的接口,定义了一个实现化的引用和对实现化的操作。修正抽象化角色(Refined Abstraction)原创 2024-03-09 16:58:21 · 1162 阅读 · 0 评论 -
Java外观模式源码剖析及使用场景
外观模式(Facade Pattern)是一种结构型设计模式,它为子系统中的一组接口提供了一个统一的高层接口,使得子系统更加容易使用。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。简化系统的调用复杂性。通过外观模式,客户端可以只需调用外观类中的方法就可以完成复杂的操作,无需深入了解子系统的内部工作机制。减小系统的编译依赖。通过外观模式,客户端只需要与外观类发生编译依赖,而无须与子系统的其他模块发生直接依赖。有利于体系结构的拓展。原创 2024-03-09 13:41:27 · 1120 阅读 · 0 评论 -
Java代理模式源码剖析及使用场景
Java的代理模式是一种结构型设计模式,它为另一个对象提供一个代理或占位符,以便控制对该对象的访问。远程代理(Remote Proxy):为一个位于不同地址空间的对象提供一个本地的代理,隐藏了对真实对象的访问细节,使得客户端能像访问本地对象一样访问远程对象。虚拟代理(Virtual Proxy):在需要创建开销很大的对象时,可以使用虚拟代理来代替真实对象,直到真实对象真正需要时才去创建它。保护代理(Protection Proxy):用于控制对一个对象的访问权限,可以让代理完全拒绝或允许访问某些方法。原创 2024-03-09 13:01:39 · 1072 阅读 · 0 评论 -
Java适配器模式源码剖析及使用场景
适配器模式(Adapter Pattern)是一种结构型设计模式,它作用于将一个类的接口转换成客户端所期望的另一种接口,从而使原本由于接口不兼容而无法一起工作的那些类可以在一起工作。它属于包装模式的一种。类适配器: 通过继承的方式实现适配器功能对象适配器: 通过组合的方式实现适配器功能。原创 2024-03-08 16:04:03 · 1318 阅读 · 0 评论 -
Java原型模式源码剖析及使用场景
Java 中的原型模式提供了一种创建对象的简单方式,通过将一个对象复制出一个新的实例来创建新对象。然后,每当我们需要创建一个新的图像对象时,只需要从原型对象上克隆一个副本出来,就可以避免重复创建对象的开销。但是,如果字段是引用类型,则会将引用地址复制给新对象,因此新对象和原对象引用同一个对象。原型模式通过对象克隆的方式来创建新的对象,避免了重复创建对象的开销,提高了系统的性能和效率。方法执行的是浅拷贝,如果对象中包含其他对象的引用,那么这些引用指向的对象并不会被克隆。字段指向不同的对象,修改新对象的。原创 2024-03-08 08:34:01 · 611 阅读 · 0 评论 -
Java建造者模式源码剖析及使用场景
建造者模式通过将对象的构建过程分离出来,使得构建过程变得更加清晰和易于维护。它适用于需要构建复杂对象的场景,可以避免出现过多的构造参数或者复杂的构造逻辑。在项目开发中,我们经常会遇到需要构建复杂对象的场景,这时就可以使用建造者模式。比如,我们需要构建一个包含多种信息的电子邮件对象,包括发件人、收件人、主题、正文、附件等。这种设计模式让我们可以通过链式调用的方式一步步构建最终的字符串对象,而不需要手动拼接字符串。内部也对字符数组进行了优化,避免了频繁地创建新的字符串对象,提高了性能。对象以支持链式调用。原创 2024-03-07 19:19:37 · 741 阅读 · 1 评论 -
Java工厂模式源码剖析及使用场景
总的来说,ResourceLoader接口定义了一个抽象的资源加载工厂,而具体的实现类(如DefaultResourceLoader)则充当了具体的资源加载工厂,根据不同的资源位置返回对应的Resource实现类。总的来说,BeanFactory接口定义了一个抽象的Bean工厂,而具体的实现类(如DefaultListableBeanFactory)则充当了具体的Bean工厂,负责创建和管理Bean实例。接口在Spring中扮演了抽象工厂的角色,它定义了获取Bean实例的标准方法,具体的实现由其子类提供。原创 2024-03-07 18:50:06 · 1861 阅读 · 0 评论 -
Java单例模式源码剖析及使用场景
单例模式的核心思想是控制实例的创建,确保单例类只有一个实例对象。在Runtime类的实现中,通过一个私有静态变量currentRuntime持有单例实例,getRuntime()方法返回这个实例。Java单例模式是一种常用的设计模式,它的目的是确保一个类只有一个实例,并提供一个全局访问点,用于访问该实例。比如,Runtime类就是一个典型的单例类,用于获取与当前Java应用程序相关的运行时对象。这种方式是单例模式的经典实现方式,兼顾了线程安全性和性能。这种方式在类加载时就完成了实例的创建,是线程安全的。原创 2024-03-07 15:49:45 · 1064 阅读 · 0 评论 -
Java设计原则代码运用案例和通俗介绍
上面这个例子中,Device接口将扫描、打印、传真功能都定义在一个臃肿的接口里,对于只有打印功能的OldFashionedPrinter类就不得不实现无关的方法。代码案例: 假设我们有一个圆形类Circle,它需要有计算面积、计算周长的方法,如果直接将输出到控制台的打印方法放在Circle类中,就违反了单一职责原则。通俗解释:一个设计良好的模块应该是可扩展的,在不改变已有代码的情况下,可以通过添加新代码来扩展功能。这样做就避免了继承产生的耦合,父类的变化不会影响子类的实现,也符合开闭原则。原创 2024-03-07 11:38:47 · 1111 阅读 · 0 评论