初学设计模式
文章平均质量分 89
从头再来,学一遍设计模式,每周至少一更!
示例语言:Java
moyufxst
这个作者很懒,什么都没留下…
展开
-
初学 Java 设计模式(二十三):实战访问者模式 「今天,你的基金红了吗?」
一、访问者模式介绍1. 解决的问题主要解决稳定的数据结构和易变的操作耦合问题。2. 定义访问者模式是一种行为设计模式,它能将算法与其所作用的对象隔离开来。3. 应用场景如果需要对一个复杂对象结构(例如对象树)中的所有元素执行某些操作,可使用访问者模式。可使用访问者模式来清理辅助行为的业务逻辑。当某个行为仅在类层次结构中的一些类中有意义,而在其他类中没有意义时,可使用访问者模式。二、访问者模式优缺点1. 优点开闭原则:可以引入在不同类对象上执行的新行为,且无需对这些类做出修改。单原创 2021-06-11 21:01:54 · 357 阅读 · 2 评论 -
初学 Java 设计模式(二十二):实战模板方法模式 「开发必备利器 uTools」
一、模板方法模式介绍1. 解决的问题主要解决在多个子类中重复写某个通用方法的问题。2. 定义模板方法模式是一种行为设计模式,它在超类中定义了一个算法的框架,允许子类在不修改结构的情况下重写算法的特定步骤。3. 应用场景当只希望客户端扩展某个特定算法步骤,而不是整个算法或其结构时,可使用模板方法模式。当多个类的算法除一些细微不同之外几乎完全一样时,可使用模板方法模式。但后果是:只要算法发生变化,可能要修改所有的类。二、模板方法模式优缺点1. 优点可以仅允许客户端重写一个大型算法中的特原创 2021-06-06 16:05:18 · 458 阅读 · 9 评论 -
初学 Java 设计模式(二十一):实战策略模式 「SpringBoot 优雅实现策略模式」
一、策略模式介绍1. 解决的问题主要解决多种算法类似的情况下,使用条件语句所带来的复杂和难以维护。2. 定义策略模式是一种行为设计模式,它能让你定义一系列算法,并将每种算法分别放入独立的类中,以使算法的对象能够相互替换。3. 应用场景当想使用对象中各种不同的算法变体,并希望能在运行时切换算法时,可使用策略模式。当有许多仅在执行某些行为时略有不同的相似类时,可使用策略模式。如果算法在上下文的逻辑中不是特别重要,使用策略模式能将类的业务逻辑与其算法实现细节隔离开来。当类中使用了复杂条件运算符原创 2021-06-06 14:42:33 · 844 阅读 · 4 评论 -
初学 Java 设计模式(二十):实战状态模式 「亲身实践,简单高效的时间管理——番茄工作法」
一、状态模式介绍1. 解决的问题主要解决在对象一个内部状态发生变化时,改变其行为的问题。2. 定义状态模式是一种行为设计模式,让你能在一个对象的内部状态变化时改变其行为,使其看上去就像改变了自身所属的类一样。3. 应用场景如果对象需要根据自身当前状态进行不同行为,同时状态的数量非常多且与状态相关的代码会频繁变更的话,可使用状态模式。如果某个类需要根据成员变量的当前值改变自身行为,从而需要使用大量的条件语句时,可使用状态模式。当相似状态和基于条件的状态机转换中存在许多重复代码时,可使用状态模原创 2021-05-30 15:37:10 · 497 阅读 · 4 评论 -
初学 Java 设计模式(十九):实战观察者模式 「您的快递已到达蜂站,请及时签收」
一、观察者模式介绍1. 解决的问题主要解决将一个对象的状态改变通知给其他对象的问题。2. 定义观察者模式是一种行为设计模式,允许你定义一种订阅机制,可在对象事件发生时通知多个 “观察” 该对象的其他对象。3. 应用场景当一个对象的改变需要改变其他对象,或实际对象时是事先未知的或动态变化时,可使用观察者模式。当应用中的一些对象必须观察其他对象时,可使用观察者模式,但仅能在有限时间内或特定情况下使用。二、观察者模式优缺点1. 优点开闭原则:无需修改发布者代码就能引入新的订阅者(如果是发原创 2021-05-30 14:53:18 · 2010 阅读 · 2 评论 -
初学 Java 设计模式(十八):实战备忘录模式 「线上刚发布就出问题怎么办?」
一、备忘录模式介绍1. 解决的问题主要解决在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,从而可以恢复原先保存的状态。2. 定义备忘录模式是一种行为设计模式,允许在不暴露对象实现细节的状态下保存和恢复对象之前的状态。3. 应用场景当你需要创建对象状态快照来恢复其之前的状态时,可以使用备忘录模式。当直接访问对象的成员变量、获取器或设置器将导致封装被突破时,可以使用备忘录模式。二、备忘录模式优缺点1. 优点可以在不破坏对象封装情况的前提下创建对象状态快照。原创 2021-05-23 22:40:48 · 264 阅读 · 2 评论 -
初学 Java 设计模式(十七):实战中介者模式 「菜鸟驿站」
一、中介者模式介绍1. 解决的问题主要解决当对象与对象之间存在大量关联关系时,若一个对象发生改变,要跟踪与之相关的对象,同时做出相应处理的问题。2. 定义中介者模式是一种行为设计模式,能减少对象之间混乱无序的依赖关系。该模式会限制对象之间的直接交互,迫使它们通过一个中介者对象进行合作。3. 应用场景当一些对象与其他对象紧密耦合以至于难以对其进行修改时,可使用中介者模式。当组件因过于依赖其他组件而无法在不同应用中复用时,可使用中介者模式。为了在不同情景下复用一些基本行为,导致需要被迫创建大量原创 2021-05-15 22:22:32 · 692 阅读 · 0 评论 -
初学 Java 设计模式(十六):实战迭代器模式 「你有多少 QQ 好友呢?」
一、迭代器模式介绍1. 解决的问题主要解决遍历整个集合对象的问题。2. 定义迭代器模式是一种行为设计模式,能在不暴露底层表现形式(列表、栈和树等)的情况下遍历集合中所有的元素。3. 应用场景当集合背后为复杂的数据结构,且希望对客户端隐藏其复杂性时(处于使用便利性或安全性考虑),可以使用迭代器模式。减少程序中重复的遍历代码,可以使用迭代器模式。希望代码能够遍历不同的甚至无法预知的数据结构,可以使用迭代器模式。二、迭代器模式优缺点1. 优点单一职责原则:通过将体积庞大的遍历算法代码抽原创 2021-05-10 23:46:37 · 166 阅读 · 10 评论 -
初学 Java 设计模式(十五):实战命令模式 「扫码点餐」
一、命令模式介绍1. 解决的问题主要解决在系统中,行为请求者和行为实现者紧耦合的问题。2. 定义命令模式是一种行为设计模式,它可将请求转换为一个包含与请求相关的所有信息的独立对象。这个转换会根据不同的请求将方法参数化、延迟请求执行或将其放入队列中,且能实现可撤销操作。3. 应用场景需要通过操作来参数化对象,可使用命令模式。将操作放入队列中、延迟操作的执行或者远程执行操作,可使用命令模式。实现操作回滚功能,可使用命令模式。二、命令模式优缺点1. 优点单一职责原则:可以解耦触发和执行原创 2021-04-24 21:19:04 · 620 阅读 · 0 评论 -
初学 Java 设计模式(十四):实战责任链模式 「请求中间件」
一、责任链模式介绍1. 解决的问题主要解决请求发送者和处理者的解耦问题。2. 定义责任链模式是一种行为设计模式,允许将请求沿着处理者链进行发送。收到请求后,每个处理者均可对请求进行处理,或将其传递给链上的下个处理者。3. 应用场景当程序需要不同方式处理不同种类请求,而且请求类型和顺序预先未知时,可以使用责任链模式。当必须按照顺序执行多个处理者时,可以使用责任链模式。如果所需处理者及其顺序必须在运行时进行改变,可以使用责任链模式。二、责任链模式优缺点1. 优点可以控制请求处理的顺序原创 2021-04-18 16:20:23 · 492 阅读 · 0 评论 -
初学 Java 设计模式(十三):实战代理模式 「视频 App 代理缓存」
一、代理模式介绍1. 解决的问题主要解决直接访问对象时带来的问题,比如对象创建开销过大或安全控制等。2. 定义代理模式是一种结构型设计模式,能够提供对象的替代品或其占位符。代理控制着对于原对象的访问,并允许在将请求提交给对象前后进行一些处理。3. 应用场景延迟初始化(虚拟代理):如果有一个偶尔使用的重量级服务对象,一直保持该对象运行会消耗系统资源时,可使用代理模式。访问控制(保护代理):如果只希望特定客户端使用服务对象(该对象可能非常重要),而客户端则是各种已启动的程序(包括恶意程序),可原创 2021-04-10 21:43:23 · 264 阅读 · 0 评论 -
初学 Java 设计模式(十二):实战享元模式 「高校选课系统优化」
一、享元模式介绍1. 解决的问题主要解决载有大量对象时,可能造成内存溢出的问题。2. 定义享元模式是一种结构型设计模式,它摒弃了在每个对象中保存所有数据的方式,通过共享多个对象所共有的相同状态,能在有限的内存容量中载入更多对象。3. 应用场景在程序必须支持大量对象且没有足够的内存容量时使用享元模式。二、享元模式优缺点1. 优点程序中有很多相似对象,那就能节省大量内存。2. 缺点可能需要牺牲执行速度来换取内存,因为每次调用向享元方法时都需要重新计算部分情景数据。代码会变得更加原创 2021-03-31 22:27:25 · 282 阅读 · 0 评论 -
初学 Java 设计模式(十一):实战外观模式 「类型转换器」
一、外观模式介绍1. 解决的问题主要解决访问复杂系统的内部子系统的复杂度问题,简化客户端与其子系统的接口。2. 定义外观模式是一种结构型设计模式,能为程序库、框架或其他复杂类提供一个简单的接口。3. 应用场景需要一个指向复杂子系统的直接接口,且该接口的功能有限,可以使用外观模式。需要将子系统组织为多层结构,可以使用外观模式。二、外观模式优缺点1. 优点可以让代码独立于复杂子系统。2. 缺点外观可能成为与程序中所有类都耦合的上帝对象。三、外观模式应用实例:类型转换器1.原创 2021-03-28 15:06:20 · 312 阅读 · 0 评论 -
初学 Java 设计模式(十):实战装饰器模式 「日志系统支持各类通知组合」
一、装饰器模式介绍1. 解决的问题主要解决动态地给一个对象添加一些额外的职责。2. 定义装饰器模式是一种结构型设计模式,允许将对象通过放入包含行为的特殊封装对象来为原对象绑定新的行为。3. 应用场景希望在无需修改代码的情况下即可使用对象,且希望在运行时能为对象增加额外的行为,可以使用装饰器模式。用继承来扩展对象行为的方案难以实现或者根本不可能时,可以使用装饰器模式。二、装饰器模式优缺点1. 优点无需创建新的子类即可扩展对象的行为。可以在运行时添加或删除对象的功能。可以使用多个装原创 2021-03-21 15:21:42 · 449 阅读 · 0 评论 -
初学 Java 设计模式(九):实战组合模式 「决策树实现精准化运营」
一、组合模式介绍1. 解决的问题在树形结构的问题中,模糊了简单元素和复杂元素的概念,客户端可以像处理简单元素一样来处理复杂元素,从而使客户端和复杂元素的内部元素解耦。2. 定义组合元素是一种结构型设计模式,可以使用它将对象组合成树状结构,并能像使用独立对象一样使用它们。3. 应用场景需要实现树状对象结构,可以使用组合模式。希望客户端代码以相同方式处理简单和复杂元素,可以使用组合模式。二、组合模式优缺点1. 优点可以利用多态和递归机制更方便地使用复杂树结构。开闭原则:无需更改现有代原创 2021-03-14 18:54:02 · 1706 阅读 · 2 评论 -
初学 Java 设计模式(八):实战桥接模式 「第三方登录实现」
一、桥接模式介绍1. 解决的问题主要解决在有多种可能变化的情况下,用继承会造成类爆炸的问题,扩展起来不灵活。2. 定义桥接模式是一种结构型设计模式,可以将一个大类或一系列紧密相关的类拆分为抽象和实现两个独立的层次架构,从而在开发时分别使用。简单来说,就是通过讲抽象部分和实现部分分离,把多种可匹配的使用进行组合。核心实现是在 A 类包含 B 类接口,通过构造函数实现 B 类的传递,这个 B 类就是设计的桥。3. 应用场景拆分或重组一个具有多重功能的庞杂类(比如能与多个数据库服务器进行交互的类原创 2021-03-07 16:01:08 · 564 阅读 · 0 评论 -
初学 Java 设计模式(七):实战适配器模式 「同步监控通知至工作群」
一、适配器模式介绍1. 解决的问题主要解决在系统中,将一些现存对象放入新环境中,而新环境要求的接口和现存对象不匹配的问题。2. 定义适配器模式是一种结构型设计模式,它能使接口不兼容的对象能够相互合作。3. 应用场景希望使用某个类,但其接口与其他代码不兼容时,可以使用适配器类。如果需要复用这样一些类,它们处于同一个继承体系,并且又有了额外的一些共同的方法,但是这些共同的方法不是这一继承体系中所有子类具有的共性。二、适配器模式优缺点1. 优点单一职责原则:可以将接口或数据转换代码从程序原创 2021-02-28 17:09:17 · 271 阅读 · 0 评论 -
初学 Java 设计模式(六):实战单例模式
一、单例模式介绍1. 解决的问题**保证一个类只有一个实例。**最常见的是控制某些共享资源 (例如数据库或文件) 的访问权限。运作方式是这样的: 如果创建了一个对象,同时过一会儿后决定再创建一个新对象,此时会获得之前已创建的对象, 而不是一个新对象。注意, 普通构造函数无法实现上述行为,因为构造函数的设计决定了它必须总是返回一个新对象。**为该实例提供一个全局访问节点。**还记得用过的那些存储重要对象的全局变量吗?它们在使用上十分方便,但同时也非常不安全,因为任何代码都有可能覆盖掉那些变量原创 2021-02-17 19:06:04 · 232 阅读 · 0 评论 -
初学 Java 设计模式(五):实战原型模式 「英雄联盟齐天大圣-真假猴王」
一、原型模式介绍1. 解决的问题主要解决的问题就是创建重复对象,这部分对象内容本身比较复杂,生成过程可能从库中或者RPC接口中获取数据的耗时较长,因此采用克隆的方式节省时间。2. 定义原型模式是一种创建型模式,能够复制已有对象,而又无需使代码依赖它们所属的类。3.应用场景对象的初始化需要很多其他对象的数据准备或其他资源的繁琐计算。需要复制一些对象,同时又希望代码独立于这些对象所属的具体类。这种场景通常出现在代码需要处理第三方代码通过接口传递过来的对象时。即使不考虑代码耦合的情况,我们原创 2021-02-16 20:50:15 · 480 阅读 · 0 评论 -
初学 Java 设计模式(四):实战建造者模式 「单人年夜饭套餐」
一、建造者模式介绍1. 解决的问题主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。2. 定义建造者模式是一种创建型设计模式,能够分步骤创建复杂对象。该模式允许使用相同的创建代码生成不同类型和形式的对象。建造者模式应用于一些基本组件不变,而其组合经常变化时,此时可以将变与不变分离开。由建造者创建和提供实例,主管者管理建造出来的实例的依赖关系。二、原创 2021-02-15 19:09:33 · 223 阅读 · 0 评论 -
初学 Java 设计模式(三):实战抽象工厂方法模式 「QQ 厘米秀装扮」
一、抽象工厂方法模式介绍1. 解决的问题通过接口的选择,解决在系统产品存在多个产品族,而系统进消费某一族的产品的问题。2. 定义抽象工厂模式是一个围绕超级工厂创建其他工厂的模式,即抽象工厂是一个中心工厂,创建其他工厂的模式。抽象工厂提供了一个接口,可用于创建每个系列产品的对象。只要代码通过该接口创建对象,那么就不会生产与当前系统已生成的产品类型不一致的产品。二、抽象工厂方法模式优缺点1. 优点可以确保同一工厂生产的产品相互匹配。可以避免客户端和具体产品代码的耦合。单一职责原则:将产品生原创 2021-02-14 19:26:39 · 298 阅读 · 0 评论 -
初学 Java 设计模式(二):实战工厂方法模式 「文章、视频、直播内容输出生产场景」
工厂方法模式一、工厂方法模式介绍1. 解决的问题通过接口的选择,解决在不同条件下创建不同实例的问题。2. 定义工厂方法模式又称工厂模式,是一种创建型设计模式,其在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型。简单来说就是为了提供代码的扩展性,屏蔽每一个功能类的具体实现逻辑,让外部仅知道调用即可。这也是去掉多个 if else 的方式,当然也存在一些缺点,如需要实现的类过多,如何维护,降低开发成本。但这些问题可以通过与其他设计模式结合使用,逐步降低影响。二、 工厂方法模式优缺点1原创 2021-01-31 18:35:19 · 262 阅读 · 2 评论 -
初学设计模式(一)创建者模式
设计模式遵循六大原则:单一职责:一个类和方法只做一件事。里氏替换:多态、子类可扩展父类。依赖倒置:细节依赖抽象,下层依赖上层。接口隔离:建立单一接口。迪米特原则:最少知道,降低耦合。开闭原则:抽象架构,扩展实现。创建型模式解决的问题基本的对象创建方式可能会导致设计上存在问题,或增加设计的复杂度。创建型模式通过以某种方式控制对象的创建来解决问题。定义创建型模式是处理对象创建的设计模式,试图根据实际情况使用合适的方式来创建对象。创建型模式旨在将系统与其对象创建、原创 2021-01-17 15:20:00 · 138 阅读 · 0 评论