首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

lvgo 一起学设计模式(十九)行为型命令之模式

命令模式 将一个请求封装为一个对象,使发出请求的责任执行请求的责任分割开。 前言 今天一大早就来了图书馆?,刚坐下来就迫不及待的开始看命令模式的相关资料?。...不过这个模式跟我之前的理解出入特别大。 最开始的时候,我以为的命令模式就是函数回调。但后来发现并不是,但他们两个确实是有关系,这一切的答案都藏在 GOF 的设计模式一书中。...开始学习 在软件设计模式之始 GOF 的原著中,命令模式的讲解还是在他们开发的那个编辑工具中,其用来讲解的案例就是我们日常编辑使用的编辑工具中,在工具栏有很多个功能按钮,或者菜单按钮。...并且这也使得调用者实现者之间通过这个“命令”进行解耦,然后我们使用依赖倒置原则,将“命令”提取出来一个抽象类,这使得扩展请求也变得容易了。...这样一看,命令模式还真是符合这种设计思路的命名啊。 命令模式类图 ?

29510

lvgo 一起学设计模式(二十)行为型之状态模式

状态模式 允许一个对象在其内部状态发生改变时改变其行为能力。 我刚开始看到这个模式的时候,没啥感觉,不知道这东西要说的是个啥,后来看了个案例,渐渐清楚了,这个模式本身还是比较简单的。...小菜的工作状态 这个案例出自程杰的《大话设计模式》,抽取案例模型,完整案例还请大家自行阅读 案例说的是主人公“小菜”上班写代码时的各种状态,上午的时候精神饱满,中午时有点萎靡,下午状态一般,晚上状态疲惫...这也是状态模式的定义中提到的 一个对象在其内部状态发生改变时改变其行为能力。 改变对象的一个状态,使他的行为也发生了变化,这看起来就像我们对这个类的代码进行了修改一样。...,所以此时的操作提供给客户的就是 申请退款,此时订单状态为 待发货; 等等订单场景较为复杂,不过万变不离其宗,即 不同的状态,用户的操作行为这笔订单之后的行为是有限的; 用一个图来看下上述几个问题场景...通过状态模式不光可以使应用程序可以应用状态可以很好的解耦,同时在状态的管理扩展上都是非常的有帮助。

24310
您找到你想要的搜索结果了吗?
是的
没有找到

lvgo 一起学设计模式(十三)行为型之策略模式

策略模式 策略模式最早的时候是在马老师的坦克大战看的,讲的很干,也挺清楚。现在回想起来更是记忆犹新。 说到策略模式,最应该关注的应该就是策略这个词语了吧。...这个词我直接贴一段百度的翻译,大家看一下 提取设计模式相关的两个含义 可以实现目标的方案集合 根据不同情况选择不同的策略 然后我们再看看标准的策略模式定义 定义了一系列算法,并将每个算法封装起来,使它们可以相互替换...而另一种就是通过使用策略模式来实现的比较器 Comparator 接口。接下来就一起看看 JDK 是怎么运用策略模式设计的比较器。 首先是策略模式中的第一个关键的定义,定义一系列算法。...‘你’ 大还是 ‘好’ 大 我们就拿 ‘你‘ ’好’ 这两个汉字来尝试一下。...但当我们的具体算法变多的时候,使用起来可能会有一些副作用,所以这个时候可以考虑使用工厂模式来辅助策略模式变得更好用。

22320

Java经典设计模式之十一种行为模式(附实例详解)

Java经典设计模式共有21中,分为三大类:创建型模式(5种)、结构型模式(7种)行为模式(11种)。...本文主要讲行为模式,创建型模式结构型模式可以看博主的另外两篇文章:Java经典设计模式之五大创建型模式(附实例详解)、 Java经典设计模式之七大结构型模式(附实例详解)。...行为模式细分为如下11种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 接下来对11种行为模式逐个进行介绍。...九、访问者模式 访问者模式把数据结构用于结构上的操作解耦合,使得操作集合可相对自由地演化。访问者模式用于数据结构相对稳定算法又易变化的系统。因为访问者模式使得算法操作增加变得容易。...访问者模式将有关行为集中到一个访问者对象中,其改变不影响系统数据结构。其缺点就是增加新的数据结构很困难。 访问者模式算是最复杂也是最难以理解的一种模式了。它表示一个作用于某对象结构中的各元素的操作。

23520

lvgo 一起学设计模式(十八)行为型之迭代器模式

迭代器模式 提供一种方法来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。 在看迭代器模式之前,我觉得应该来研究一段代码开开胃先。...通过数据也证实了 迭代器 增强 for 循环的写法效果相同。...接下来我们就看看 JDK 中是怎么样用这个迭代器模式设计集合遍历程序的。go! 迭代器模式类图 ? ?...因为迭代器模式是围绕 JDK 的 iterator 来学习的,所以这里具体的迭代器模式的实现代码就没有自己实现,不过这里学习了 JDK 的代码。我就简单记录一下 JDK 的实现思路。...因为有了迭代器接口可被迭代的集合接口两个接口的设计方式可以在集合或迭代器的扩展上提供很好的支持,这也满足了开闭原则。 这个模式基本不会使用。除非你有自己的数据结构对他们的遍历规则时。

41230

lvgo 一起学设计模式(十四)行为型之模板方法模式

终于来到了设计模式的“人性”部分,行为模式,为什么说行为模式是“人性”部分呢,因为行为模式当中的 11 种设计模式对理解都非常的友好啊。所以接下来的内容可能让我学起来说不定更有趣些。...再比如经常写需求说明书的时候,会同事要一份“模板”,这也是一种模板方法模式的体现。...模板方法模式类图 看类图就是抽象子类的样子,而实际模板方法模式就是利用了"抽象"。是一个完全遵守开闭原则的设计模式。可以这么说,搞懂了模板方法模式,开闭原则基本就通了。...我怎么用模板方法模式模板方法模式可以说是非常简单的一种设计模式了,虽然简单,但它的作用却很大。...不过,设计模式的复杂性,是不可避免的。在功能复用、提高生产力上来说,这点复杂性的代价,还是能够接受的。

27720

lvgo 一起学设计模式(十六)行为型之责任链模式

这样设计的好处就行定义中说的那样,去除对象将的耦合。 假设这个业务场景需要请求的对象是存在联系的,比如具有一定顺序去消费同一个对象,又比如他们消费对象的方法相同,具体逻辑略有差异。...责任链模式类图 张三请假 张三使用责任链模式请假流程示意图 抽象处理类,各个环节处理时统一标准。...总结 使用责任链模式可以使原本的对象间耦合度降低。各个模块间功能更加具体专注。...同时可以配合创建型模式中的工厂模式,来封装链的维护,这样在链上节点发生变化时(算法实现发生改变、新增或删除)对于高层模块是没有感知的。扩展起来非常的方便。...或使用建造者模式来更加灵活地创建这条“责任链”,以达到客户端的自定义目的。总之,责任链模式在处理链式问题是个利器。

41020

lvgo 一起学设计模式(十七)行为型之备忘录模式

需求设计 存档对象的管理角色 Caretaker 管理存档对象 存档对象 Memento 具体的存档对象 存档的创建者 Originator 管理“存档”这件事,创建恢复存档。 代码 ?...备忘录模式可以使我们对一个对象的状态进行保存,在需要的时候快速恢复。不得不说的就是备忘录模式如果保存的大量的对象时,内存的占用还是需要关注一下的。...在备忘录模式中保存对象的时候,可以配合原型模式来一起使用。 最后,这个模式在 Java 中应该不太香,原因上面也说了。...所以我对这个设计模式仅作为了解,真正要使用它的话我还是会尽可能的考虑使用 Serializable。 **优点:**无侵入备份/恢复对象状态(在 Java 里不是很香)。...缺点:GOF 中的写法在 Java 中不香,同时使用这种模式需考虑内存占用问题。

37020

lvgo 一起学设计模式(十五)行为型之观察者模式

观察者模式 多个对象间存在一对多关系,当一个对象发生改变时,把这种改变通知给其他多个对象,从而影响其他对象的行为。 提到观察者,就一定有“被观察者”。...被观察者发生改变时,通知给每个观察者,这就是观察者模式。放到生活中的例子就是 天气预报的短信通知,在很早以前,我们的天气预报服务可以通过短信的信息订阅。...甚至里面的报纸内容可能是不相同的,这里就涉及到了多个被观察者观察之间的关系,这个小盒子能收到自己订阅的报社报纸,当然你可以同时订阅多个,这样你就可以收到多个报社送过来的报纸了。...所有这里可以抽象出来几个角色动作。...观察者数量,如果一个被观察者被很多观察者观察(订阅)时,在通知时的时间将会变得漫长; 不能出现被观察者观察者之间存在循环观察情况,否则系统会直接崩溃; 观察者模式的代码虽然很简单,但是它所创造的价值却远不止这些

29120

JAVA设计模式22:备忘录模式用于保存恢复对象的状态

一、什么是备忘录模式 备忘录模式(Memento Pattern)是一种行为设计模式,它允许在不暴露对象内部状态的情况下保存恢复对象的状态。...历史记录功能:备忘录模式可以用于实现对象的历史记录功能。通过保存对象的不同状态到备忘录中,可以记录对象的历史状态,并在需要时进行查看回溯。...总之,备忘录模式用于需要保存恢复对象状态的场景,尤其是在需要实现撤销操作、历史记录、恢复功能等方面,它可以有效地解决状态管理历史记录的问题,并提供更好的灵活性可维护性。...四、备忘录模式面试题 一、请解释备忘录模式的定义用途。 答案:备忘录模式是一种行为设计模式,它允许在不暴露对象内部状态的情况下保存恢复对象的状态。...三、备忘录模式用于哪些场景? 答案:备忘录模式用于以下场景: 需要实现对象的撤销操作。 需要实现对象的历史记录功能。 需要保存恢复对象的状态,但又不希望暴露对象内部状态给其他对象。

28430

lvgo 一起学设计模式(二十一)行为型之中介者模式

中介者模式 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 与其说中介者模式还不如说是软件设计原则的具体体现。...这里可以参考之前的系列文章*《 lvgo 一起学习设计模式 - 序》*中的软件设计基本原则 6 迪米特法则 6️⃣ 迪米特法则又叫作最少知识原则 LOD/LKP ,1987 年美国东北大学?‍?...“仔哥,那面叫我来组长申请。我组长是谁啊?”,“我啊,我就是你组长,跟我申请”。王二没说话。“把这个表格打出来,填一下,给我部门经理签字”,“仔哥,去哪里打印?”...模式结构: 中介者接口 Mediator 具体中介者 ConcreteMediator 同事抽象类 Colleague 具体同事 ConcreteColleague 多学一点:在设计模式中发现几乎所有的模式结构图中...,都会有接口或者抽象类,这其实是依赖倒置的默认思路,任何的程序设计这一点原则都要优先考虑。

31810

lvgo 一起学设计模式(二十二)行为型之访问者模式

访问者模式 将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。...它将对数据的操作与数据结构进行分离,是行为模式中最复杂的一种模式。 刚看到这个模式的时候,我人都傻了,完全不知道说的是啥,直到看了近5份资料!...才搞清楚这个设计模式,不愧是最复杂的一种,我也这样觉得。不过千万别被复杂吓到,捋清了之后,还是比较简单的。 开门见山 访问者模式“人如其名”,就是说不同的访问者对同一个对象的访问结果不同。...访问者接口,依赖倒置接口 Visitor; 被访问的元素,Element; 最后一个,ObjectStructure 对象结构; 这里唯一可能需要解释的就是这个 ObjectStructure 了,他即用于来定义管理...解决的问题: 访问者模式使数据结构与数据访问分离 可以很灵活的增加不同的访问规则 自身的问题: 一旦出现数据结构变更(新增类型),将会使访问者发生较大的修改,因为需要调整访问者接口!严重违反了开闭原则

16920

知识总结:设计模式总结(C++Python实现)前言案例实现 创建型模式 结构型模式行为模式对比总结

前言 GoF的23种设计模式,包括创建型、结构型行为型,其涵盖了面向对象思想的精髓以及诸多细节。...本文结合《设计模式《大话设计模式》,并用C++Python实现了《大话设计模式》中的23种模式案例。原文首发于个人博客Jennica.Space。...创建型 结构型 行为型 案例实现 《大话设计模式》C++版 《大话设计模式》Python版 创建型模式 工厂方法模式(Factory    Method) 工厂方法模式:定义一个用于创建对象的接口...桥接模式:抽象类其派生类分离,各自实现自己的对象。若系统可以从多角度分类,且每种分类都可能变化,则把多角度分离独立出来,降低耦合。...在高级编程语言如c#、c++、java等,都已经把迭代器模式设计进语言的一部分。 迭代器模式分离了对象的遍历行为,既不暴露内部结构又可以让外部代码透明的访问集合内部的数据。

1.4K80

【云+社区年度征文】 lvgo 一起学设计模式(二十三)行为型之解释器模式

写在前面 这篇是《 lvgo 一起学设计模式》系列的最后一个设计模式了,这篇就轻松一些吧。...因为时代的发展、技术的更替等等原因(你想做的解释器都有人做好了,且开源)吧,可能这个是我们很长一段时间都用不到的一种设计模式了。 你能看懂TA的“眼色”吗? 还记得那些年看过的影视剧吗?...给定一个”眼色“,定义”摆头“或”坐的位置“,并定义一个规则,这样就可以解释图中的柯镇恶”老婆“了。...解释器模式类图 [interpreter-UML.png] 这个结构比较简单,定义一个解释接口,然后就是两个具体的解释器 最终解释器 非最终解释器 环境 这两个有点像组合模式中的子节点叶节点的意思。...在今天,解释器模式应该很少会在我们的应用自己去设计了,毕竟这如同设计一门语言一样,过程很复杂,还记得我们正在用的正则表达式吗?

38010

AI模型可预测人们在打字时如何移动眼睛手指

除了预测普通人将如何打字之外,该模型还能够考虑不同类型的用户,例如运动障碍的用户,并可用于开发针对这些人群而设计的打字辅助工具或界面。...对于那些没有特殊挑战的人,可以从个人写作风格中得出结论(例如,注意到在文本电子邮件中反复出现的错误),哪种键盘或自动校正系统最适合一个用户。 可视化键入时用户指向查看的位置。...左:按模型模拟;右:用户的观察。 这种新颖的方法建立在该小组较早的实证研究的基础上,该研究为人类如何进行认知模式提供了基础。然后,研究人员产生了能够独立打字的生成模型。...强化学习通常用于教导机器人通过反复试验来解决任务。团队发现了一种使用此方法来产生与人类行为非常相近的行为的新方法,包括错误,纠正和所有错误。 ‘我们赋予模型与人类一样的能力界限。...将来,该小组希望模拟慢速快速打字技术,例如,为想要提高打字效率的人们设计有用的学习模块。

58320

浅谈自动化测试模型

自动化测试模型可以看作自动化测试框架与工具设计的思想。随着自动化测试技术的发展,演化为以下几种模型: 线性测试 模块化驱动侧式 数据驱动测试 关键字驱动测试 线性测试 线性测试较为简单。...将测试数据参数化,解决测试数据改变而影响数据驱动测试,解决脚本重复问题同时增加脚本可重用性可维护性 装载数据的方式可以是列表,字典或是外部文件(txt,csv,xml,excel),实现脚本与数据分离...使用ddt执行数据驱动测试 ddt的库可以将测试中的变量进行参数化,包含一组类方法用于数据驱动测试。...其实我们做关键字的驱动的思想,就是把编码从测试用例测试步骤中分离出来,这样对于不会编码的人员更容易理解自动化,从而让手工测试人员也可以编写自动脚本。 OK, 聊完了设计模型哪种模型更好?...如果数据比较多,业务差不多的情况下,数据驱动是最适合不过了。 如果公司推行敏捷,而且人人需要参与,关键字或者BDD是最适合不过了。

73010

ChatGPT的提示的一些高级知识

无论是将ChatGPT用于客户服务、内容创建,还是仅仅为了好玩,本文都将为你提供使用ChatGPT优化提示的知识技巧。...精心设计的提示是用来将任务传达给语言模型并指导其输出的工具。 所以对语言模型有简单的了解,并且清楚的了解自己的目标,再加上领域内的一些知识,是用于训练改进语言模型的性能的关键。...如果不确定使用哪种方法,可以尝试不同的方法,看看哪种方法最适合。我们将总结5中思考方式: 1....Reflection 在ReAct模式的基础上,Reflection方法通过添加动态内存自反射功能来增强LLM——可以推理特定于任务的操作选择能力。...反模式 三星肯定对这个非常了解,因为交了不少学费吧,哈。‍ 不要分享私人和敏感的信息。 向ChatGPT提供专有代码财务数据仅仅是个开始。

23120

关于架构的理解

维基百科的定义是:软件架构是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。系统的三大特征表现在架构上就是:横向可并列,纵向可推导,整体可演进。...有4+1视图、C4模型、TOGAF提出的企业架构模型等。不管哪种模型,其核心思想都是从不同的维度对软件架构进行描述。下面着重从这几个方面来简述。...Group 制定的用于开发企业架构(Enterprise Architecture)的一套方法工具。...2.4  架构的设计模式软件架构归根结底无非两种模式:从技术层面业务功能层面来设计。在理解这两个之前想区分一下技术语言和业务语言:技术语言:是实现层面的。...STL中算法与数据分离式水平分离;常见的数据库读写模式是水平分离;前端展示中的模版与引擎是水平分离。MVC设计模式中显示、控制、数据的分离是垂直分离。TCP七层协议模型是垂直分离

63410
领券