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

【设计模式】设计模式总结 ( 七大设计原则 | 创建型模式 | 结构型模式 | 行为型模式 ) ★★★

, 尽量使用 对象 组合/聚合 , 而不是 继承关系 ; 聚合 是 has-A 关系 ; ( 关系较弱 ) 代表部分事物的对象 ( 次 ) 与 代表聚合事物的对象 ( 主 ) 生命周期无关 , 删除了聚合对象...: 使接口不兼容的两个类可以一起工作 ; ④ 概念中的三个角色 : 被适配者 ( 现有的功能类 ) , 用户目标接口 ( 用户调用的接口 ) , 适配器类 ( 用户通过调用该类 , 间接调用 被适配者类...功能正确但接口不匹配 : 对于之前开发好的类 , 该类的操作和返回值都是正确的 , 但是其定义的方法接口无法调用 , 此时使用适配器模式 , 使该类与用户的接口匹配 , 让用户使用适配器的接口 , 间接调用该类...; 代理对象 在 客户端 和 目标对象 之间 起到 中介的作用 ; 如 : 租客通过中介找房东租房子 , 房东将房子托管给了中介 , 房东是目标对象 , 但是租赁行为是中介来执行的 , 中介是代理类...命令模式类型 : 行为型 ; 命令模式 适用场景 : 解耦发送者与接收者 : 请求发送者 和 请求接收者 ( 执行者 ) 需要 解耦 , 发送者 与 接收者 之间 不直接进行交互 ; 抽象行为 : 需要将

1.4K30

Java设计模式之行为型模式

迭代器模式 迭代器模式应用的场景及意义: (1)访问一个聚合对象的内容而无需暴露它的内部表示。 (2)支持对聚合对象的多种遍历。 (3)为遍历不同的聚合结构提供一个统一的接口。...命令模式就是通过在行为请求者与行为实现者中间引入中介者(命令),将行为请求者的行为动作抽象为对象(命令),行为请求者不直接操作行为实现者,而是通过操作命令间接操作行为实现者,从而实现二者之间的松耦合。...使用案例:MVP模式 ---- 备忘录模式【Memento】 【学习难度:★★☆☆☆,使用频率:★★☆☆☆】 定义:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。...状态模式的特点: 状态模式描述了对象状态的变化以及对象如何在每一种状态下表现出不同的行为。...这些信息需要存放到环境角色中,很多情况下我们使用Map来充当环境角色就足够了。

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

    “大话”设计模式

    这样,客户端无须关心请求的处理细节以及请求的传递,只需将请求发送到链上即可,将请求的发送者个处理者解耦。 设计职责链时,→每一个对象及对其上级领导的引用而连接起来形成一条链。...使用场景: 1、模版方法模式广泛应用于框架设计(如Spring,Struts等)中,以保证父类控制处理路程的逻辑顺序,比如Spring对于Hibernate使用的简单封装:HibernateTemplate...命令设计模式:     在面向对象的程序设计中,一个对象调用另一个对象,一般情况下的调用过程是:创建目标对象实例、设置调用参数、调用目标对象的方法。...但是有些情况下有必要使用一个专门的类对这种调用过程加以封装,这种类叫做command类。 命令模式的本质是对命令进行封装,将发出命令的责任个执行命令的责任分隔开。...使用状态模式可以描述工作流对象(如批文)的状态转换以及不同状态下它所具有的行为。

    53830

    敲黑板了!《行为型模式》来袭

    命令模式可以与组合模式结合,将多个命令装配成一个组合命令 缺点: 使用命令模式可能会导致某些系统有过多的具体命令类 系统结构更加复杂 4)责任链模式 责任链模式又称为职责链模式,为了避免请求发送者与多个请求处理者耦合在一起...,所有的观察者收到的被观察者发送的通知会有一定的耗时 如果被观察者有循环依赖的话,那么被观察者发送通知会使观察者循环调用,会导致系统崩溃 7)中介者模式 中介模式又称为 调停模式,定义一个中介角色来封装一系列对象之间的交互...缺点: 如果同事对象过多时,中介者对象会变得过于庞大,而变得复杂,难以维护 8)迭代器模式 提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示 这里说的 迭代器模式 与我们平时在集合中用到的...(accept),意义在于每一个元素都可以被访问者访问 具体元素(ConcreteElement)角色: 提供接受访问方法的具体实现,而这个具体的实现,通常情况下是使用访问者提供的访问该元素类的方法 对象结构...由于在解释器模式中使用了大量的循环和递归调用,因此在解释较为复杂的句子时其速度很慢,而且代码的调试过程比较麻烦 ? ?

    45620

    UML与设计模式

    实现 实现的强弱关系和泛化一样,不一样的是父类为接口,使用的是虚线而不是实线。 组合 在visio里较复合,其中被聚合的部分离开整体后无法单独存在。因此关系之间更强。实心菱形,实线。...电脑为调用者,组件为被调用者。 聚合 被聚合的类可以离开整体而单独存在。公司为调用者,员工为被调用者。 关联 一种调用关系,从调用者指向被调用者,调用者操作被调用者的类。为下图上面。...用户对象中传入中介对象方法,获取中介对象提供的服务,间接知道交互对象 【交互复杂度转换为了中介的复杂度导致的中介复杂,多个使用者等问题】 装饰模式 【组件1和组件2为出口,装饰器为栈调用形式,每个装饰器实现中存放了上一个装饰器实现...【用户】发送请求,责任者1处理请求,然后判断是否调用上层责任者 4. 上层责任者依次处理请求。 代理模式 【这里的客户端指代用户】 1. 【用户】创建真实主题类 2....【用户】最大的组成部分执行操作,如显示特征,则逐个调用。 【组成部分的聚合关系,表示了组成部分会遍历其组件】 构建模式 1. 【用户】创建构建者 2. 【用户】调用构建产品 3.

    44320

    【设计模式】学习笔记(四)—— 行为型设计模式

    ) 对比较长的责任链,请求的处理可能涉及多个处理对象,系统性能受到一定影响 责任链建立的合理性要靠客户端来保证,增加了客户端的复杂性,可能会由于责任链的错误设置而导致系统出错,如可能会造成循环调用 适用场景...被观察者发送通知,所有注册的观察者都会收到信息【可以实现广播机制】 缺点: 如果观察者非常多的话,那么所有的观察者收到被观察者发送的通知会耗时 如果被观察者有循环依赖的话,那么被观察者发送通知会使观察者循环调用...,当然如果是已经做好的系统,那么就扩展中介者对象,而各个同事类不需要做修改) 一个多关联转变为一对一的关联(没有使用中介者模式的时候,同事对象之间的关系通常是一对多的,引入中介者对象以后,中介者对象的关系通常变成双向的一对一...*/ } } ---- 迭代器模式 概述:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。...具体元素(ConcreteElement)角色:提供接受访问方法的具体实现,而这个具体的实现,通常情况下是使用访问者提供的访问该元素的方法。

    56420

    漫谈模式之行为模式小结

    Aggregate(聚合)聚合定义创建相应迭代器对象接口ConcreteAggregate(具体聚合)具体聚合实现创建相应迭代器的接口,该操作返回ConcreteIterator的一个适当的实例。...了解并维护它的各个同事Colleague(同事类)每一个同事类都知道它的中介者对象每一个同事对象在需与其他的同事通信的时候,与它的中介者通信参与者如何协作?同事向一个中介者对象发送和接收请求。...Context (上下文)持有一个对Strategy对象的引用。详见:漫谈模式之策略模式备忘录模式的基本介绍意图在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。...这个模板方法一般会在抽象类中定义,并由子类不加以修改地完全继承下来,所以在java中使用final来进行修饰。一个抽象类可以有任意多个模板方法,而不限于一个。每个模板方法都可以调用任意多个具体方法。...访问者模式 vs 解释器模式访问者模式的目的是在不修改现有类结构的情况下对其进行操作,而解释器模式的目的是解释和执行特定语言的规则。

    33830

    【设计模式面试】行为型设计模式你清楚几个?

    一个try可以对应多个catch,当第一个catch不匹配类型,则自动跳到第二个catch. Javascript语言中,事件的冒泡和捕获机制。Java语言中,事件的处理采用观察者模式。...迭代器模式就是在客户访问和聚合类之间插入一个迭代器,这样就将聚合对象 和 遍历方法解耦了,并且对外隐藏其实现细节。...6.2 迭代器模式的应用 JDK中的List/Set集合中的迭代器 … 7.中介者模式 7.1 中介则模式的作用   对象之间具有很强的关联性,而且有大量的相互调用,这种情况下,如果一个对象发生了变化,...如果这样的对象因为某些事件,其内部状态发生了改变,那么系统的行为也要随之发生变化的话,就可以使用状态模式。 9.命令模式 场景:请求的发送者和接收者之间解耦,让对象之间的调用关系更加灵活。...发送者和接收者之间没有直接的引用关系,发送请求的对象只需要知道如何发送,而不必关心如何完成请求。

    32120

    一篇文章带你了解设计模式——行为型模式

    : 系统需要将请求调用者和请求接收者解耦,使得调用者和接收者不直接交互。...被观察者发送通知,所有注册的观察者都会收到信息【可以实现广播机制】 最后我们给出观察者模式的缺点: 如果观察者非常多的话,那么所有的观察者收到被观察者发送的通知会耗时 如果被观察者有循环依赖的话,那么被观察者发送通知会使观察者循环调用...迭代器模式 下面我们来介绍迭代器模式 迭代器模式简述 首先我们来简单介绍一下迭代器模式: 提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。...具体元素(ConcreteElement)角色: 提供接受访问方法的具体实现,而这个具体的实现,通常情况下是使用访问者提供的访问该元素类的方法。...: 需要保存与恢复数据的场景,如玩游戏时的中间结果的存档功能。

    43830

    设计模式大集合

    示例代码 演示如何在编程语言中使用模式的说明。 已知用途 模式的实际使用示例。 相关模式 与模式有一定关系的其他模式;讨论模式和相似模式之间的差异。...解释器 使用一种语言,为它的语法定义一个表示,以及一个使用该表示来解释语言句子的解释器。 迭代器 提供了一种方法,可以在不暴露其底层表示的情况下连续访问聚合对象的元素。...并发模式 名称 描述 活动对象 将方法执行从位于其自身控制线程中的方法调用中分离出来。我们的目标是通过使用异步方法调用和处理请求的调度程序来引入并发性。...计算内核 在并行计算中,相同计算操作(但数据不同)的计算,使用共享数组将不同计算的数据统一计算,如GPU优化矩阵乘法或卷积神经网络。...通信 可靠的会话 结束了在源和目的地之间传递消息的可靠传输,而不考虑将端点分离的中介体的数量或类型。 通信 请求响应 一个双向消息通信机制,客户端期望收到对发送的每条消息的响应。

    1.3K90

    设计模式大集合

    示例代码 演示如何在编程语言中使用模式的说明。 已知用途 模式的实际使用示例。 相关模式 与模式有一定关系的其他模式;讨论模式和相似模式之间的差异。...解释器 使用一种语言,为它的语法定义一个表示,以及一个使用该表示来解释语言句子的解释器。 迭代器 提供了一种方法,可以在不暴露其底层表示的情况下连续访问聚合对象的元素。...并发模式 名称 描述 活动对象 将方法执行从位于其自身控制线程中的方法调用中分离出来。我们的目标是通过使用异步方法调用和处理请求的调度程序来引入并发性。...计算内核 在并行计算中,相同计算操作(但数据不同)的计算,使用共享数组将不同计算的数据统一计算,如GPU优化矩阵乘法或卷积神经网络。...通信 可靠的会话 结束了在源和目的地之间传递消息的可靠传输,而不考虑将端点分离的中介体的数量或类型。 通信 请求响应 一个双向消息通信机制,客户端期望收到对发送的每条消息的响应。

    83830

    再谈23种设计模式(3):行为型模式(学习笔记)

    备忘录模式(Memento pattern):在不破坏封装的前提下,保持对象的内部状态。中介者模式(Mediator pattern):用一个中介对象来封装一系列的对象交互。...迭代器模式(iterator pattern):一种遍历访问聚合对象中各个元素的方法,不暴露该对象的内部结构。...抽象工厂允许客户端使用抽象的接口来创建一组相关的产品,而不需要关心这些产品的具体实现。这样可以在不影响客户端的情况下更换产品族或产品的具体实现。...如何区分:如果你需要对一个复杂的对象结构执行多种不同且不相关的操作,并且希望能够在不修改对象结构的情况下添加新操作,那么使用访问者模式。如果你需要实现一个解释器来解释语言的句子,那么使用解释器模式。...在实现execute()方法时,将调用接收者对象的相关操作(Action)。Invoker(调用者):调用者即请求发送者,它通过命令对象来执行请求。

    24010

    05.静态代理设计模式

    思考一下:代理类的责任?代理类在静态代理中充当了中介的角色,负责将客户端的请求转发给被代理类,并在必要时添加额外的功能或控制。需要考虑代理类应该承担的责任,以及如何在代理类中实现这些责任。...举一个实际案例定义用户找房子的需求接口创建用户找房子具体实现类创建一个代理中介,委托中介去找房子代码如下所示,可以了解到,静态代理可以通过聚合来实现,让代理类持有一个委托类的引用即可。...; }}代码案例分析,它降低耦合的设计思想是什么通过使用静态代理,我们可以在不修改 RealMailSender 类的情况下,为邮件发送操作添加额外的功能。...,而代理类中的方法只要调用具体类中的对应方法即可,这样我们在需要使用接口中的某个方法的功能时直接调用代理类的方法即可,将具体的实现类隐藏在底层。...比如,邮件发送的接口 MailSender,以及一个实现该接口的具体类 RealMailSender。可以在不修改 RealMailSender 类的情况下,为邮件发送操作添加额外的功能。

    9100

    设计模式之行为模式集合

    责任链模式的基本介绍 意图 责任链的意图是使多个对象都有机会处理请求,从而避免请求的发送者和接收者之前的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。...(聚合) 聚合定义创建相应迭代器对象接口 ConcreteAggregate(具体聚合) 具体聚合实现创建相应迭代器的接口,该操作返回ConcreteIterator的一个适当的实例 详见《迭代器模式浅析...每一个同事对象在需与其他的同事通信的时候,与它的中介者通信。 参与者如何协作? 同事向一个中介者对象发送和接收请求。中介者在各同事间适当地转发请求以实现写作行为。 详见《中介者模式浅析》 6....备忘录模式的基本介绍 意图 在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 结构 备忘录模式的基本结构如下: ?...每个模板方法都可以调用任意多个具体方法。 基本方法 抽象方法:一个抽象方法由抽象类声明,由具体子类实现,方法使用abstract关键字修饰 具体方法:一个具体方法由抽象类声明并实现,而子类并不实现。

    81930

    设计模式| 行为型模式 (下)

    ,使得请求发送者与请求接收者能够消除彼此之间的耦合, 让对象之间的调用关系更加灵活,可以灵活地指定请求接收者以及被请求的操作。...命令模式的核心在于引入了命令类,通过命令类来降低发送者和接收者的耦合度,请求发送者只需指定一个命令对象,再通过命令对象来调用请求接收者的处理方法。...在实现execute()方法时,将调用接收者对象的相关操作(Action)。 ● Invoker(调用者):调用者即请求发送者,它通过命令对象来执行请求。...适用场景 在以下情况下可以考虑使用状态模式: (1) 对象的行为依赖于它的状态(如某些属性值),状态的改变将导致行为的变化。...适用场景 在以下情况下可以考虑使用中介者模式: (1) 系统中对象之间存在复杂的引用关系,系统结构混乱且难以理解。

    46720

    五万字详解“GoF”的23种设计模式

    不该知道的不要知道,一个类应该保持对其它对象最少的了解,降低耦合度 只和朋友交流,不和陌生人说话,减少代码臃肿 合成复用原则 尽量使用组合或者聚合关系实现代码复用,少使用继承 降低代码耦合 1、开闭原则...它要求在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。 如果要使用继承关系,则必须严格遵循里氏替换原则。...迭代器模式 提供一种方法顺序访问一个聚合(指一组对象的组合结构,如:Java中的集合、数组等)对象中各个元素,而又不需暴露该对象的内部表示。迭代器模式的本质:控制访问聚合对象中的元素。...访问者模式 是一种将数据操作与数据结构分离的设计模式,它可以算是 23 中设计模式中最复杂的一个,但它的使用频率并不是很高,大多数情况下,你并不需要使用访问者模式,但是当你一旦需要使用它时,那你就是需要使用它了...,当需要和其他同事进行通信时,可通过中介者来实现间接调用。

    3.1K61

    Java二十三种设计模式-中介者模式(2223)

    示例: 假设在一个聊天应用中,用户界面中有多个组件,如消息输入框、发送按钮、消息列表等。使用中介者模式,这些组件可以通过一个中介者对象来协调它们的交互,如发送消息、接收消息等事件。...使用中介者模式,可以创建一个中介者来协调这些模块之间的交互,如订单状态更新、支付确认、库存扣减等。...耦合度:中介者模式中,对象之间的耦合度更低,因为它们不直接相互引用,而是通过中介者进行通信。 应用场景:适用于需要集中管理复杂交互的系统,如UI组件之间的协调。...解耦:命令模式通过将调用者和接收者解耦,提高了系统的灵活性。 应用场景:适用于需要对操作进行封装、记录、排队或撤销的系统,如事务处理系统。 相比之下,中介者模式关注于简化对象之间的交互和通信。...6.3 替代方案 使用事件总线 解耦通信:事件总线提供了一种发布-订阅模式,允许对象在不直接引用对方的情况下进行通信。

    13810

    ASP.NET Core中使用MediatR实现命令和中介者模式

    在本文中,我将解释命令模式,以及如何利用基于命令模式的第三方库来实现它们,以及如何在ASP.NET Core中使用它来解决我们的问题并使代码简洁。因此,我们将通过下面的主题来进行相关的讲解。...我们如何在我们的.NET Core应用程序中使用MediatR 使用命令和事件的实例 命令模式及其简单实例 从根本上讲,命令模式是一种数据驱动的设计模式,属于行为模式的范畴。...使用两种类型的命令,并且需要一个接口,它应该由实现了EmailMessageCommand和SMSMessageCommand的类类继承。还使用代理类来调用特定类型的消息类来处理操作。 ?...中介模式定义了一个对象,该对象封装了一组对象是如何交互的。 中介模式的优势及MediatR如何帮助我们实现中介模式 中介模式定义了一个对象,该对象封装了一组对象是如何交互的(如维基百科定义的)。...这里,我们使用了Publish 方法,而不是Send 函数。发布将调用订阅了NewUser 类的所有处理程序。

    1.2K00

    《设计模式》学习笔记整理手册

    ,而不针对具体类编程接口隔离原则使用多个接口来替代一个统一的接口合成复用原则在系统中尽量多使用组合和聚合关联关系,尽量少使用甚至不使用继承关系迪米特法则一个软件实体对其他实体的引用越少越好,或者说如果两个类不必彼此直接通信...系统需要在不同的时间指定请求、将请求排队和执行请求。 系统需要将请求调用者和请求接收者解耦,使得调用者和接收者不直接交互。...,如使用“|”表示或,使用“{”和“}”表示组合,使用“*”表示出现0次或多次等,其中使用频率最高的符号是表示或关系的“|” 。...5.5.3 模式分析 模式作用 中介者模式起到中转的作用,当同事类需要调用时,调用中介者就好,不需要调用同事类,中介者模式将同事对象之间的关系行为进行封装,起到了协调的作用 模式优缺点 中介者模式优点...不同类型的商品其访问形式也可能不同,如苹果需要过秤之后再计价,而图书不需要。使用访问者模式来设计该购物过程。

    29610

    设计模式学习笔记整理手册

    依赖倒转原则 要针对抽象层编程,而不针对具体类编程 接口隔离原则 使用多个接口来替代一个统一的接口 合成复用原则 在系统中尽量多使用组合和聚合关联关系,尽量少使用甚至不使用继承关系 迪米特法则 一个软件实体对其他实体的引用越少越好...系统需要在不同的时间指定请求、将请求排队和执行请求。 系统需要将请求调用者和请求接收者解耦,使得调用者和接收者不直接交互。...,如使用“|”表示或,使用“{”和“}”表示组合,使用“*”表示出现0次或多次等,其中使用频率最高的符号是表示或关系的“|” 。...5.5.3 模式分析 模式作用 中介者模式起到中转的作用,当同事类需要调用时,调用中介者就好,不需要调用同事类,中介者模式将同事对象之间的关系行为进行封装,起到了协调的作用 模式优缺点 中介者模式优点...不同类型的商品其访问形式也可能不同,如苹果需要过秤之后再计价,而图书不需要。使用访问者模式来设计该购物过程。

    1.2K30
    领券