[DesignPattern]剩下的模式

23种设计模式分类+SOLID设计原则+从设计模式角度看MVC框架 阅读详情

剩下的模式

责任链(邮件分类处理,现在的项目事件处理businessHandler是这个的变种)

当你想要让一个以上的对象有机会能够处理某个请求的时候,就使用责任链模式(Chain of Responsibility Pattern)。

责任链的优点责任链的用途和缺点
将请求的发送者和接受者解耦。经常被使用在窗口系统中,处理鼠标和键盘之类的事件。
可以简化你的对象,因为它不需要知道链的结构。并不保证请求一定会被执行;如果没有任何对象处理它的话,它可能会落到链尾端之外。
通过改变链内的成员或调动它们的次序,允许你动态地新增或者删除责任。可能不容易观察运行时的特征,有碍于除错。

桥接(通过将实现和抽象放在两个不同的类层次中而使用它们可以独立改变)

使用桥接模式(Bridge Pattern)不只改变你的实现,也改变你的抽象。

桥接的优点桥接的用途和缺点
将实现予以解耦,让它和界面之间不再永久绑定适合使用在需要跨越多个平台的图形和窗口系统上
抽象和实现可以独立扩展,不会影响到对方当需要用不同的方式改变接口和实现时,你会发现桥接模式会很好用
对于“具体的抽象类”所做的改变,不会影响到客户桥接模式的缺点时增加了复杂度

生成器(规划假期)

使用生成器模式(Builder Pattern)封装一个产品的构造过程,并允许按步骤构造

生成器的优点生成器的用途和缺点
将一个复杂对象的创建过程封装起来经常被用来创建组合结构
允许对象通过多个步骤来创建,并且可以改变过程(这和只有一个步骤的工厂模式不同)与工厂模式相比,采用生成器模式创建对象的客户,需要具备更多的领域知识
向客户隐藏产品内部的表现
产品的实现可以被替换,因为客户只看到一个抽象的接口

蝇量(绘制一堆树,一个树实例和一个客户对象来维护“所有”树的状态)

如想让某个类的一个实例能用来提供许多”虚拟实例”,就使用蝇量模式(Flyweight Pattern)

蝇量的优点蝇量的用途和缺点
减少运行时对象实例的个数,节省内存当一个类有许多的实例,而这些实例能被同一方式控制的时候,我们就可以使用蝇量模式
将许多“虚拟”对象的状态集中管理蝇量模式的缺点在于,一旦你实现了它,那么单个的逻辑实例将无法拥有独立而不同的行为

解释器(当你需要实现一个简单的语言时,就使用解释器模式定义语法的类,并用一个解释器解释句子)

使用解释器模式(Interpreter Pattern)为语言创建解释器

解释器的优点解释器的用途和缺点
将每一个语法规则标示成一个类,方便于实现语言当你需要实现一个简单的语言时,使用解释器
因为语法由许多类表示,所以你可以轻易地改变或扩展此语言当你由一个简单的语法,而且简单比效率更重要时,使用解释器
通过在类结构中加入新的方法,可以在解释的同时增加新的行为,例如打印格式化的美化或者进行复杂的程序验证可以处理脚本语言和编程语言
当语法规则的数目太大时,这个模式可能会变得非常繁杂。在这种情况下,使用解释器/编译器的产生器可能更适合

中介者(在没有中介者的情况下,所有的对象都需要认识其他对象)

中介者的优点中介者的用途和缺点
通过将对象彼此解耦,可以增加对象的复用性中介者常常被用来协调相关的GUI组件
通过将控制逻辑集中,可以简化系统维护中介者模式的缺点是,如果设计不当,中介者对象本身会变得过于复杂
可以让对象之间所传递的消息变得简单而且大幅减少

备忘录(游戏存档)

当你需要让对象返回之前的状态时(例如,你的用户请求”撤销”),就使用备忘录模式(MementoPattern)

备忘录的优点备忘录的用途和缺点
将被存储的状态放在外面,不要和关键对象混在一起,这可以帮助维护内聚备忘录用于储存状态
保持关键对象的数据封装存储和恢复状态的过程可能相当耗时
提供了容易实现的恢复能力在Java系统中,其实可以考虑使用序列化(serialization)机制储存系统状态

原型(原型模式允许你通过复制现有的实例来创建新的实例)

当创建给定类的实例的过程很昂贵或很复杂时,就使用原型模式(Prototype Pattern)。

原型的优点原型的用途和缺点
向用户隐藏制造新实例的复杂性在一个复杂的类层次中,当系统必须从其中的许多类型创建新对象时,可以考虑原型
提供让用户能够产生未知类型对象的选项对象的复制有时相当复杂
在某些环境下,复制对象比创建对象更有效

访问者(访问者必须参观组合内的每个元素)

当你想要为一个对象的组合增加新的能力,且封装并不重要时,就使用访问者模式(Visitor Pattern)

访问者的优点访问者的用途和缺点
允许你对组合结构加入新的操作,而无需改变结构本身当采用访问者模式的时候,就会打破组合类的封装
想要加入新的操作,相对容易因为游走的功能牵涉其中,所以对组合结构的改变就更加困难
访问者所进行的操作,其代码是集中在一起的
【两方演化博弈代码复现】:双方演化博弈的原理、概率博弈仿真、相位图、单个参数灵敏度演化 演化博弈论是研究个体在特定环境中如何通过策略选择与其他个体进行互动的学科。这一理论在生物学、经济学和社会科学等多个领域都有广泛应用。本文将深入探讨双方演化博弈的原理及其过程,并解读一段 MATLAB 代码,展示如何模拟这一过程。 阅读详情

相关推荐

CMOS传输门实战:如何用模拟开关优化你的电路设计(附常见问题排查)

本文深入探讨了CMOS传输门在电路设计中的实战应用与优化策略。文章从核心参数选型入手,详细分析了导通电阻、电荷注入等关键特性对电路性能的影响,并提供了多路复用器构建、精密电路应用等实战架构。同时,重点分享了PCB布局、电源去耦的工程细节,以及开关不导通、信号失真、高频性能不足等常见问题的系统性排查指南,旨在帮助硬件工程师充分发挥CMOS模拟开关的效能,提升电路设计的可靠性与精度。

js777的博客 450

Java设计模式之剩下的模式

我们在强调一件事情的时候都会强调一些事情还有一些不太常用的我们一律使用“等等”来代表,因为我们剩下的几个模式实在是很难见到了所以我们就使用“剩下的”来代表吧!  1>创建型模式用来处理对象的创建过程,主要包含以下5种设计模式: 工厂方法模式(Factory Method Pattern) 抽象工厂模式(Abstract Factory Pattern) 建造者模式(Builder Patt

郭蕾蕾 努力的包子 873

Apifox CLI + Claude Skills:将接口自动化测试融入ai

基于 Apifox CLI、Claude Code以及Claude Skills组合,实现自然语言触发接口自动化测试。

wwz_0012的博客 596

【一起学系列】之剩下的设计模式们

前言 【开发】:老大,你教了我挺多设计模式的,已经全部教完了吗? 【BOSS】:没呢,还有好几个设计模式没说过呢,今天再传授你三个吧,分别是建造者模式,责任链模式,备忘录模式,如何? 【开发】:好啊,我最喜欢学习了! 建造者模式 意图 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 核心代码 定义建造接口 public interface Builder { void buildPartOne(); void buildPartTwo(); voi

Kerwin的博客 263

华为私有云HCS 8.1.1实战:从镜像制作到云主机发放全流程指南

本文详细解析了华为私有云HCS 8.1.1从镜像制作到云主机发放的全流程实战指南。内容涵盖制作标准化QCOW2镜像、配置云主机规格与主机组、规划外部网络,以及在运营面为租户初始化资源、配置审批流与产品目录。最后,通过用户视角演示了从创建VPC网络到申请、审批并最终绑定EIP访问云主机的完整操作步骤,为运维人员和架构师提供了一套清晰、可落地的HCS部署与管理实践方案。

weixin_29305313的博客 1124

从零到一:OptimizePI Pre-layout PDN前仿真实战指南

本文详细介绍了如何使用OptimizePI进行电源完整性(PDN)前仿真,从软件安装配置到元器件建模、去耦电容配置及仿真参数设置,提供了实战技巧和常见问题排查指南。通过OptimizePI的Pre-layout仿真,工程师可以在PCB布局前优化电源分配网络,显著提升设计效率并降低成本。

weixin_28304023的博客 505

《Head First 设计模式》:剩下的模式

正文 一、桥接模式 1、定义 桥接模式通过将实现和抽象分离开来,放在两个不同的类层次中,从而使得它们可以独立改变。 要点: 当一个类存在两个独立变化的维度,而且都需要进行扩展时,可以将其中一个维度抽象化,另一个维度实现化。 抽象化就是通过抽象类来实现多态,实现化则是通过接口来实现多态。 桥接模式通过在抽象类中持有实现类接口,来将两个维度“桥接”起来。 2、实现步骤 (1)创建实现化角色接口 /** * 实现化角色接口 */ public interface Implementor { vo

惊却一目 201

Ai数字人直播系统搭建,本地源码部署,源码交付--支持OEM系统贴牌

AI 数字人直播系统是利用人工智能技术创建虚拟主播,并通过数字化技术实现直播互动的系统1。以下是其相关介绍:Ai数字人直播系统搭建,本地源码部署,源码交付--支持OEM系统贴牌。

weixin_ggwwsscc的博客 617

《headfirst设计模式》读书笔记14-剩下的模式

目录1. 桥接 1. 桥接

qq_46470984的博客 603

LLM大模型-vLLM本地部署全流程:Windows WSL2环境安装、HuggingFace与Modelscope模型加载与本地运行、Docker化部署与镜像分发

vLLM本地部署大模型方案 vLLM是一款高性能大模型推理引擎,通过PagedAttention技术显著提升吞吐量和内存效率,支持低成本、高并发的本地部署。 核心优势: 性能卓越:吞吐量远超同类方案,支持连续批处理等高级功能 成本优化:减少GPU服务器需求 兼容性强:提供类OpenAI的简洁API 部署步骤: 硬件准备:需NVIDIA GPU(如A100/3090),显存≥模型参数量×2(7B模型需14GB) 软件环境: Linux系统或Windows WSL2 安装CUDA 12.1+和Python 3.

2202_75674969的博客 4565

从病毒分析到安全研究:手把手教你用OD破解加壳程序的反调试机制

本文深入探讨了如何识别并绕过加壳程序的反调试机制,特别是针对使用IsDebuggerPresent等API检测的防护手段。通过实战案例和工具链配置,详细介绍了逆向工程中的关键技巧,包括内存补丁、硬件断点定位OEP等,帮助安全研究人员有效突破软件保护技术。

tgb345678的博客 822

你要的全拿走,剩下的我承受【设计模式概念及(单例、工厂、代理、观察者模式等模式详解^_^)】

设计模式的本质:是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理解 基本要素: 模式名称 问题 解决方案 效果 GOF23种设计模式: 软件设计的七大原则: 实际上,这些原则的目的只有一个:降低对象之间的耦合,增加程序的可复用性、可扩展性和可维护性。 记忆口诀:访问加限制,函数要节俭,依赖不允许,动态加接口,父类要抽象,扩展不更改。 在程序设计时,我们应该将程序功能最小化,每个类只干一件事。若有类似功能基础之上添加新...

m0_59619191的博客 562

Android-Zygote进程的诞生—从init到Zygote启动

Android Zygote进程启动流程解析 Android系统的Zygote进程是所有应用进程的父进程,由init进程创建。启动流程分为: 内核阶段:加载init进程(PID=1) init进程阶段: 挂载基础文件系统(tmpfs、proc等) 设置SELinux安全策略 解析init.rc配置文件 Zygote启动:init进程通过app_process启动Zygote,预加载系统资源 SystemServer:Zygote fork出系统服务进程 关键点: init是用户空间第一个进程......

保持专注,保持热爱 636

基于Python学习《Head First设计模式》第十四章 剩下的模式

【代码】基于Python学习《Head First设计模式》第十四章 剩下的模式。

wzx77的博客 408

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

java设计模式----模板方法模式

概述 模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。 比如定义一个操作中的算法的骨架,将步骤延迟到子类中。模板方法使得子类能够不去改变一个算法的结构即可重定义算法的某些特定步骤。 模式中的角色 抽象类(Ab...

Vegetable的博客 178

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

总结

xuxue_liu的专栏 459

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

设计模式概论

设计模式概论1. 设计模式       设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。          模式的经典定义:每个模式都描述了...

xingsilong的博客 277

常用设计模式Python实现

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 代码查看:https://github.com/nonpricklycactus/Design-Pattern 一、设计模式分类 经典的《设计模式》一书归纳出23种设计模式,这23种模式又可...

nonpricklycactus的博客 6732

设计模式原则

看了设计模式,最后看的总是感觉他们有很大的相似之处,就像是世界上万事万物都有其生存法则一样.仔细分析其实设计模式都是围绕一条主线来的。这就是设计模式的原则。你可以把设计原则比作一门语言。把设计模式当作这门语言编写出来的程序。如果你精通了语言剩下的编码就是很简单的事情了. 对于层出不穷的设计模式,比如Gof的23种设计模式,MVC模式,到底应该怎样去学习,如果我们单纯的一个一个的研究设计模式本身,那么只能是越看越多,越来越乱.其实我们只要抓住设计模式的原则,就能很清楚的分析出它为什么会这么做.

李守宏 6431

设计模式——迭代器设计模式(行为型)

本文详细介绍了迭代器设计模式,这是一种行为型设计模式,用于顺序访问集合对象中的元素,同时隐藏集合的内部结构。文章首先定义了迭代器设计模式并阐述了其核心角色,包括迭代器接口、具体迭代器、容器接口和具体容器。接着,文章通过 Java 标准库中的 Iterator 接口为例,展示了迭代器设计模式的结构和实现方式。

庄小焱 1369

【设计模式】何为设计模式

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。在学习具体模式之前,我想有必要先了解一些概念。

Just do it! 1200

Unity中常用的几种设计模式

23种设计模式,实在是太多了,而且其中有一些看着还貌似差不多,让人很费解,好不容易理解了每一种设计模式的含义,并且看了一堆伪代码之后,高高兴兴的合上了书本去玩几把LOL,赢了几把之后脑袋里关于那23种设计模式的概念就剩下80%了,然后接下来的每日工作中,基本写代码的时候也用不到啊!老板催着让你做功能,你就还哪里记得去使用设计模式啊,就开始乱写吧,日复一日,23种设计模式基本就和你拜拜了,再见了。

天生爱赞美的博客 2万+

漫画:什么是 “设计模式” ?

这本书是软件研发领域重要的里程碑,合著此书的四位作者Erich Gamma,Richard Helm,Ralph Johnson ,John Vlissides被业内称为GoF(Ga...

程序员小灰的博客 1978

【JavaEE】设计模式之单例模式

设计模式之单例模式详解。

冲击大厂之路!!! 1264

【 C语言 】 C语言设计模式

我们知道,在现实的软件开发过程当中,用户的要求是多种多样的。之后,又有顾客提出,现在的肉馅饺子只有猪肉的,能不能做点牛肉、羊肉馅的饺子?一些只吃素的顾客也有意见了,他们建议能不能增加一些素馅饺子的品种,什么白菜馅的、韭菜馅的,都可以做一点。但是电脑是由很多部分组成的,每个厂家都只负责其中的一部分,而且相同的组件也有很多的品牌可以从中选择。但是,这种模式用简单的一句话说,就是不同的人对不同的事物有不同的感觉。外观模式是比较简单的模式。对于不同的用户需求,我们可以给予不同的产品,而且这些产品的接口都是一致的。

沐风—云端行者 2319

多个if用什么设计模式_Spring中常见的几种设计模式

Spring框架是每个Java程序猿入门级的框架,也是最重要的框架之一。Spring开发人员用了一套极其优雅的代码实现了各个功能,学习Spring源码是每个开发人员进阶的一种非常有效的途径。由于Spring源码中存在大量的设计模式的实现,所以说学习设计模式对于我们去学习源码抑或是提高代码质量是很有帮助的。通常所说的设计模式是GOF二十三种设计模式,在这里只介绍其中的几种,抛砖引玉,更多的...

weixin_39574868的博客 1689
上一篇: [DesignPattern]结束也是开始
下一篇: [算法导论]网易MIT算法导论课笔记(简略版)
xy_cpp
博客等级 码龄10年 119粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值