- 博客(97)
- 收藏
- 关注
原创 行为设计模式之Visitor(访问者)
访问者模式(Visitor)是一种行为设计模式,允许在不改变对象结构的情况下定义新操作。其核心思想是将算法与对象结构分离,通过"访问者"对象来实现对元素的操作。该模式包含Visitor(访问者)、ConcreteVisitor(具体访问者)、Element(元素)和ConcreteElement(具体元素)等角色。示例代码展示了两种不同的访问者(ConcreteVisitorOne和ConcreteVisitorTwo)分别对学生和教师对象执行不同的统计操作(如年龄总和、最高成绩等)。访问者模式适用于对象结
2025-06-16 14:51:40
798
原创 策略模式和模板方法模式的区别【面试题】
摘要:策略模式和模板方法模式均属于行为设计模式,但核心差异显著。策略模式通过组合实现,支持运行时动态切换完整算法(如支付方式切换),变化维度大;模板方法模式通过继承实现,固定算法骨架但允许子类定制特定步骤(如文档生成流程不变,数据源可变),变化维度小。前者由调用方主动选择策略(控制权在客户端),后者遵循“好莱坞原则”由父类控制流程调用子类方法(控制权在父类)。选择依据:需灵活替换整套逻辑用策略模式;需复用流程但微调步骤用模板方法模式。
2025-06-16 09:44:26
735
原创 行为设计模式之Template Method(模板方法)
摘要:模板方法模式是一种行为设计模式,通过定义算法骨架并将特定步骤延迟到子类实现,实现代码复用和扩展控制。该模式包含抽象类(定义原语操作和模板方法)和具体类(实现特定步骤)。适用于固定流程但需灵活步骤的场景,如框架开发、GUI工具包和数据处理。示例展示了订单处理中用户、商家和快递服务的差异化实现。该模式能消除重复代码,严格管控扩展点,并通过钩子方法提供灵活性,常见于Spring、JUnit等框架中。
2025-06-16 09:27:49
885
原创 行为设计模式之Strategy(策略)
策略模式是一种行为设计模式,它定义一系列算法并封装为独立对象,使它们可以相互替换。该模式让算法独立于使用它的客户端而变化,适用于需要动态切换算法、避免大量条件语句、实现算法与使用代码分离的场景。文章通过Java代码示例展示了加减乘三种算法的策略实现,并列举了电商定价、游戏AI、金融投资等典型应用领域。策略模式的核心优势在于提高代码扩展性和维护性,符合开闭原则。
2025-06-15 22:50:20
897
原创 行为设计模式之State(状态)设计模式
本文介绍了行为设计模式中的State(状态)模式。该模式允许对象在内部状态改变时改变行为,解决对象行为依赖于状态的多分支条件判断问题。文章展示了状态模式的结构、适用场景以及一个售货机状态转换的代码示例。典型应用场景包括对象行为随状态显著变化、需避免大量条件分支、状态转换规则明确且可能变化、状态数量较多或可能增加等情况。常见应用领域涵盖游戏开发、用户界面、工作流引擎、网络协议和嵌入式系统等。状态模式通过将状态和行为封装到独立类中,提高了代码的可读性、可维护性和扩展性,符合开闭原则。
2025-06-15 20:29:21
1059
原创 行为设计模式之Observer(观察者)
摘要:Observer(观察者)模式定义对象间一对多的依赖关系,当被观察者状态改变时,自动通知所有观察者。适用于RBAC权限同步、消息队列(如RabbitMQ)、游戏状态更新、监控报警等场景。结构包含Subject(目标)、Observer(观察者)及具体实现类,通过注册/通知机制实现解耦。典型应用包括:GUI事件处理、MVC数据同步、发布订阅系统、库存监控、游戏开发等。代码示例展示了Java实现,其中ConcreteSubject维护观察者列表并在状态变更时触发通知,ConcreteObserver更新
2025-06-11 23:07:24
1199
原创 行为设计模式之Memento(备忘录)
*备忘录模式(Memento Pattern)**的核心思想是在不破坏对象封装性的前提下,捕获并外部化(存储)一个对象的内部状态,以便以后可以将该对象恢复到原先保存的状态。它的主要使用场景围绕着需要保存对象状态并在未来某个时刻恢复该状态的需求,同时要求不能直接暴露对象的内部实现细节(封装性原则)。
2025-06-10 21:08:35
950
原创 行为型设计模式之Mediator(中介者)
用一个中介对象来封装一系列的对象的交互。中介者使各对象不需要显示的相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
2025-06-08 22:43:21
831
原创 行为设计模式之Iterator(迭代器)
摘要: 迭代器模式(Iterator)是一种行为设计模式,它提供顺序访问聚合对象元素的方法,同时不暴露内部结构。该模式由迭代器接口(Iterator)、具体迭代器(ConcreteIterator)、聚合接口(Aggregate)和具体聚合(ConcreteAggregate)组成,适用于需要遍历不同聚合结构的场景。示例代码展示了通过BookIterator遍历BookAggregate中的图书信息,实现了数据存储与遍历逻辑的分离。这种模式支持多种遍历方式,并为不同聚合提供统一访问接口,提高了代码的灵活性和
2025-06-08 22:35:03
492
原创 行为型设计模式之Interpreter(解释器)
给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语音中的句子。
2025-06-07 22:18:46
530
原创 行为设计模式之Command (命令)
需要发出请求的对象(调用者)和接收并执行请求的对象(执行者)之间没有直接依赖关系时。比如遥控器 每个按钮绑定一个command对象,这个Command对象内部持有真正执行操作的Receiver(如文档编辑器、打印服务)的引用,并知道调用Receiver的哪个方法。改变按钮功能只需更换绑定的Command对象。
2025-06-07 21:06:49
1028
原创 行为型设计模式之Chain of Responsibility(责任链)
摘要:责任链模式是一种行为型设计模式,允许请求沿着处理链传递,直到被某个对象处理。该模式由Handler抽象类定义处理接口,ConcreteHandler具体实现处理逻辑,每个处理者决定处理请求或传递给下个处理者。适用于多个对象可处理请求、请求接收者不明确或需动态指定处理集合的场景。示例代码展示了请假审批链,从小组长到部门经理逐级审批,体现了责任链的动态处理机制。
2025-06-06 09:42:21
808
原创 结构型设计模式之Proxy(代理)
本文介绍了结构型设计模式中的Proxy(代理)模式,其核心思想是为对象提供代理以控制访问。代理模式适用于远程代理、虚代理、保护代理和智能引用等场景。文中通过Java代码示例演示了代理模式的实现:Proxy类作为RealSubject的代理,控制对真实对象的访问,并在请求前后添加额外操作。该模式在AOP环绕通知、动态/静态代理等场景中都有应用。
2025-06-04 15:09:01
506
原创 结构性设计模式之Flyweight(享元)
享元模式是一种结构性设计模式,通过共享对象来减少内存使用和对象创建开销。该模式将对象属性分为内部状态(可共享)和外部状态(不可共享),适用于大量相似对象场景。典型案例包括图形游戏(粒子效果、地图瓦片)、文本处理(字符样式)和UI控件。模式结构包含享元接口、具体享元类、享元工厂和客户端。文中以Java代码示例展示了如何实现共享圆形对象的颜色属性,而坐标作为外部状态单独处理,有效减少了对象创建数量。
2025-06-04 14:50:48
821
原创 结构性设计模式之Facade(外观)设计模式
Facade(外观)模式是一种结构性设计模式,它通过提供一个统一的高层接口来简化复杂子系统的使用。该模式的意图是为子系统中的一组接口提供一致的界面,使其更容易被调用。主要特点包括:Facade类了解子系统的内部结构,将客户端请求代理给适当的子系统对象子系统类实现具体功能,但不知道Facade的存在适用于需要简化复杂系统接口、降低系统耦合度或构建层次化子系统的情况示例代码展示了如何通过Facade类统一调用多个子系统的功能方法(methodOne、methodTwo等)。这种模式特别适合需要隐藏
2025-06-04 10:11:41
500
原创 结构型设计模式之Decorator(装饰器)
摘要: 装饰器模式是一种结构型设计模式,允许动态地为对象添加功能而不改变其源代码。本文通过李四的才艺展示案例演示了该模式的应用。关键点包括:1)意图是动态添加职责,比继承更灵活;2)结构包含Component、ConcreteComponent、Decorator和ConcreteDecorator四个角色;3)适用于需要透明扩展对象功能、支持功能撤销或无法使用子类扩展的场景。代码示例展示了如何通过DecoratorA和DecoratorB在原有"画画"才艺基础上逐步添加"唱歌"和"跳舞"功能,体现了装饰器
2025-06-03 11:48:55
1141
原创 结构性设计模式之Composite(组合)
摘要:Composite(组合)模式通过树形结构表示"部分-整体"层次关系,使得用户能够统一处理单个对象和组合对象。该模式包含Component(组件接口)、Leaf(叶子节点)和Composite(组合节点)三个核心角色,适用于需要表示对象层次结构并统一操作的场景。示例代码展示了文件夹结构的实现,Folder类管理子组件,File类作为叶子节点,通过递归遍历实现统一处理。该模式简化了客户端代码,使系统更易扩展和维护。
2025-06-03 09:50:17
554
原创 结构性设计模式之Bridge(桥接)
桥接模式是一种结构性设计模式,其核心思想是将抽象部分与实现部分分离,使二者能够独立变化。本文通过汽车产品生产案例(产品A/B与颜色红/蓝/黄)展示了桥接模式的应用:将颜色作为独立接口实现,产品类通过组合方式调用颜色功能。关键结构包括抽象产品类(Product)、具体产品类(ProductA)和颜色接口(Color)及其实现类(Red/Blue/Yellow)。该模式适用于需要避免抽象与实现固定绑定的场景,支持通过子类扩展功能,且修改实现不影响客户端代码。代码示例演示了如何为不同产品动态配置颜色。
2025-05-29 22:02:49
813
原创 结构性设计模式之Adapter(适配器)
本文介绍了结构性设计模式中的适配器模式(Adapter Pattern)。适配器模式分为类适配器和对象适配器两种形式,其核心思想是将一个接口转换为客户期望的另一个接口,类似"狸猫换太子"的替换逻辑。文章通过电影主角和替身演员的类比,生动解释了该模式的工作原理。代码示例展示了如何通过Adapter类将Adaptee(替身演员)的接口适配到Target(主角)接口,使不兼容的接口能够协同工作。适配器模式适用于需要让现有类与新接口协同工作的场景。
2025-05-29 09:58:59
443
原创 创建型设计模式之Singleton(单例)设计模式
Singleton(单例)设计模式确保一个类仅有一个实例,并提供全局访问点。其结构包含一个静态方法getInstance()用于获取唯一实例,构造方法私有化防止外部实例化。适用于需要控制实例数量(如配置管理、线程池等)或需通过子类扩展但客户端无需修改代码的场景。示例代码展示了通过静态变量实现线程安全的单例模式,多次调用getInstance()返回同一实例,验证了唯一性。
2025-05-28 14:29:44
482
原创 创建型设计模式之Prototype(原型)
摘要:Prototype(原型)设计模式通过复制现有对象来创建新对象,避免重复初始化操作。该模式包含Prototype接口声明克隆方法、ConcretePrototype实现具体克隆逻辑,以及Client客户端调用克隆操作。示例代码展示了Product类实现Prototype接口,通过clone()方法复制对象属性。这种模式适用于创建成本较高的对象,能提高性能并简化对象创建过程。(149字)
2025-05-28 11:47:37
637
原创 创建型模式之 Builder (生成器)
本文介绍了生成器(Builder)设计模式,属于创建型模式之一。该模式通过将复杂对象的构建与表示分离,使同一构建过程能创建不同表现形式。文章以小米汽车不同配置版本为例说明了模式意图,并提供了Java代码实现示例,展示了如何通过Director管理Builder来构建不同的Product。核心包括抽象Builder类、具体Builder实现类以及最终产品类,实现了通过相同构建过程生成不同配置产品的目标。
2025-05-28 10:49:18
529
原创 创建型模式之Abstract Factory(抽象工厂)
本文介绍了抽象工厂模式(Abstract Factory),它是一种创建型设计模式,提供了一种创建一系列相关对象的接口而无需指定具体类。文章通过手机工厂示例进行说明,展示小米和华为两个工厂分别生产不同类型产品(屏幕、芯片、键盘等)的实现过程。代码演示了如何定义抽象工厂接口、具体工厂类和产品类,并展示了运行结果。该模式适用于需要创建产品族且不依赖具体产品类的情况,能够提高系统的灵活性和可扩展性。
2025-05-27 15:04:41
498
原创 创建型模式之Factory Method(工厂方法)
工厂方法模式是一种创建型设计模式,通过将对象实例化延迟到子类来实现解耦。该模式包含抽象工厂接口、具体工厂类、抽象产品和具体产品四个要素,相比简单工厂模式更具扩展性。文章展示了工厂方法模式的结构图,并提供了Java代码示例,演示如何通过不同工厂(FactoryA/FactoryB)创建对应产品(ProductA/ProductB)的过程,体现了多态特性。这种模式适用于需要灵活扩展产品类型的场景,遵循开闭原则,但会引入更多类。
2025-05-26 15:12:43
706
原创 Simple Factory(简单工厂)
摘要:简单工厂模式是一种创建型设计模式,通过定义工厂类根据参数返回不同产品实例,这些产品通常具有共同父类。示例展示了使用静态工厂方法创建ProductA和ProductB的Java实现,但该模式违反了开放封闭原则,因为新增产品类型需要修改工厂类代码。
2025-05-26 15:00:52
447
原创 项目报 OutOfMemoryError 、GC overhead limit exceeded 问题排查以及解决思路实战
项目报 OutOfMemoryError 、GC overhead limit exceeded 问题排查以及解决思路实战
2024-12-27 22:11:16
4135
原创 Caused by: com.alibaba.fastjson.JSONException: illegal input, offset 1, char 4
com.alibaba.fastjson.JSONException: illegal input, offset 1, char 1
2024-12-23 15:41:10
2067
原创 javax.net.ssl.SSLPeerUnverifiedException: Hostname 192.168.13.13 not verified:
javax.net.ssl.SSLPeerUnverifiedException: Hostname 192.168.13.13 not verified
2024-12-20 16:03:46
1494
原创 Springboot 接入 WebSocket 实战
WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端。简单理解:1,常见开发过程中我们知道 Http协议,客户端请求一次,服务器响应一次,推送数据,不能主动的推送数据,每次请求都要做一个连接,非常消耗性能。2,websocket 建立一次链接,可以主动向客户端推送数据。
2024-10-12 10:17:16
1615
1
原创 nginx报“/app/nginx/client_body_temp/0000000003“ failed (13: Permission denied)
nginx报"/app/nginx/client_body_temp/0000000003" failed (13: Permission denied)
2024-10-09 09:44:35
975
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人