
Java设计模式(示例讲解)
文章平均质量分 70
以示例推动对设计模式的理解,以期达到举一反三,触类旁通的目标。
翠花也老了
专注于系统开发,执着于代码优雅
展开
-
迭代器模式(Iterator Pattern)
又称为游标模式(Cursor Pattern),它提供了一种顺序访问集合/容器对象元素的方法,而又无须暴露集合内部表示。本质:抽离集合对象迭代行为到迭代器中,提供一致访问接口。属于行为型模式。原创 2024-07-12 15:32:59 · 545 阅读 · 1 评论 -
访问者模式(Visitor Pattern)
访问者模式(Visitor Pattern)表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。该模式的主要思想是将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使得可以在不改变数据结构的前提下添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。属于行为型模式。原创 2024-07-11 21:19:15 · 642 阅读 · 0 评论 -
原型模式(Prototype Pattern)
原型模式用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。调用者不需要知道任何创建细节,不调用构造函数。属于创建型模式。原创 2024-07-10 17:13:17 · 429 阅读 · 0 评论 -
单例模式(Singleton Pattern)
是指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点。隐藏起所有的构造方法。属于创建型模式。原创 2024-07-10 11:32:45 · 783 阅读 · 0 评论 -
中介者模式(Mediator Pattern)
又称为调解者模式,或调停者模式。中介者模式定义了一个中介对象来封装一系列对象之间的交互,使得这些对象不需要直接相互通信,而是通过与中介者进行通信。通过中介者解耦系统各层次对象的直接耦合,层次对象的对外依赖通信统统交由中介者转发。属于行为型模式。解耦关联对象:通过引入中介者来减少各个相关对象之间的直接依赖关系。集中控制逻辑:将复杂的交互逻辑集中在一个中介者类中管理和处理。促进可扩展性:新添加或修改现有相关对象时,只需修改或扩展中介者类而无需改变其他部分。原创 2024-07-09 09:07:40 · 644 阅读 · 0 评论 -
状态模式(State Pattern)
也称为状态机模式(State Machine Pattern)通过定义不同的状态类来封装与特定状态相关的行为,并将状态的判断逻辑转移到表示不同状态的一系列类中,从而把复杂的判断逻辑简化。状态模式将状态和行为分开,使对象在内部状态改变时能够改变它的行为。每一个状态对应一个子类,从而将状态的转换逻辑分布到状态子类中,减少了相互依赖。客户端通常不直接与状态对象交互,而是通过环境类(Context)与状态对象进行交互。原创 2024-07-05 16:53:05 · 589 阅读 · 0 评论 -
备忘录模式(Memento Pattern)
又称为快照模式(Snapshot Pattern)或 Token 模式,是指在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。备忘录模式提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史步骤。当新的状态无效或者存在问题时,可以使用暂时存储起来的备忘录将状态复原。属于行为型模式。原创 2024-07-08 14:22:25 · 655 阅读 · 0 评论 -
观察者模式(Observer Pattern)
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。别名:模型-视图模式、源-收听者模式、从属者模式、发布-订阅模式。观察者模式通过解耦观察者和被观察者,使得它们可以独立地变化和复用。是行为型设计模式。原创 2024-07-04 12:35:31 · 642 阅读 · 0 评论 -
享元模式(Flyweight Pattern)
享元模式通过共享技术来支持大量细粒度的对象,以减少内存中的对象数量。其核心思想是将对象的状态分为内部状态和外部状态,内部状态是不变的,可以被多个对象共享;外部状态是随环境改变而改变的,不能共享,必须由客户端保持。属于结构型模式。原创 2024-07-03 15:41:55 · 826 阅读 · 0 评论 -
组合模式(Composite Pattern)
将单个对象(叶子节点)和组合对象(树枝节点)用相同的接口进行表示。使客户端对单个对象和组合对象保持一致的方式处理。属于结构型模式。原创 2024-07-01 16:07:44 · 627 阅读 · 0 评论 -
门面模式(Facade Pattern)
又叫外观模式,提供了一个统一的接口,用来访问子系统中的一群接口。门面模式定义了一个高层接口,让子系统更容易使用。属于结构型模式。门面模式的重点在于封装;静态代理的重点在于增强。门面模式有时会做成单例,比如工具包。原创 2024-07-01 23:19:36 · 326 阅读 · 0 评论 -
适配器模式(Adapter Pattern)
它的功能是将一个类的接口变成客户端锁期望的另一种接口,从而使原本因接口不匹配而导致无法在一起工作的两个类能够一起工作。属于结构型设计模式。原创 2024-06-28 15:52:01 · 462 阅读 · 1 评论 -
策略模式(Strategy Pattern)
它是将定义的算法家族、分别封装起来,让它们之间可以相互替换,从而让算法的变化不会影响到使用算法的用户。可以避免多重分支的 if-else、switch语句。属于行为型模式。原创 2024-06-27 14:45:52 · 585 阅读 · 0 评论 -
模板方法模式
又叫 模板模式,是指定义一个算法骨架,并允许子类为其中的一个或者多个步骤提供实现。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤。属于行为型设计模式。原创 2024-06-26 16:02:14 · 791 阅读 · 0 评论 -
建造者模式
将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。屏蔽建造的具体细节,用户不需要知道对象的建造过程和细节,就可以创建出复杂的对象;通过先设置好建造者的变量,然后再一次性地创建对象,能够避免无效状态,让对象一直处于有效的状态;避免冗长的构造函数参数;设置好所有需要的参数之后进行集中校验,能够避免使用set() 时由于属性志军存在依赖关系而产生的由于 set() 顺序错乱而导致的校验失败的问题。属于创建型模式。原创 2024-06-26 13:54:05 · 482 阅读 · 0 评论 -
命令模式(Command Pattern)
命令模式是对命令的封装,每一个命令都是一个操作:请求的一方发出请求要求执行一个操作;接收的一方收到请求,并执行操作。命令模式解耦了请求方和接收方,请求方只需请求执行命令,不用关心命令是怎样被接收,怎样被操作以及是否被执行等。命令模式是将请求封装成一个对象,这样可以使用不同的请求参数化其他对象(依赖注入),并且能够支持请求的排队执行、记录日志、撤销等功能。本质:解耦命令请求与处理。属于行为型模式。原创 2024-06-25 14:50:30 · 572 阅读 · 0 评论 -
责任链模式
将请求的发送和接收解耦,让多个对象都有机会依次处理这个请求,形成一个链条。责任链模式是将链中每一个节点看作是一个对象,每个节点处理的请求均不同,且内部自动维护一个下一节点对象。当一个请求从链式的首端发出时,会沿着链的路径依次传递给每一个节点对象,直至有对象处理这个请求为止。属于行为型模式。原创 2024-06-20 16:01:36 · 468 阅读 · 0 评论 -
装饰器模式
也叫包装模式 (Wrapper Pattern)是指在不改变原有对象的基础上,将功能附加到对象上,提供了比继承更有弹性的替代方案。属于结构型模式。原创 2024-06-20 13:57:49 · 407 阅读 · 0 评论 -
代理模式(静态代理/动态代理)
为其他对象提供一种代理,以控制对这个对象的访问。代理对象在客户端和目标对象之间起到了中介作用,起到保护或增强目标对象的作用。属于结构型设计模式。代理模式分为静态代理和动态代理。静态代理是显式声明被代理对象,即硬编码出来的代理结构;动态代理是动态配置和替换被代理对象,即通过在jvm中生成一个代理类来实现代理。原创 2024-06-19 16:17:09 · 523 阅读 · 0 评论 -
桥接模式——连接抽象维度和实现维度
桥接模式,是将抽象部分与它的具体实现部分分离,使它们都可以独立地变化。它是将两个不同的维度建立联系。这两个维度通常是指:抽象维度和实现维度。原创 2023-07-18 16:54:24 · 348 阅读 · 0 评论