设计模式名录

简介: 本文给出了经典的23种设计模式的名录,包括他们的分类、名称、定义以及简要说明,方便大家能够快速的回忆起他们。也是前面写过的或者后面将要写的设计模式的一个目录。更是为了能督促自己能将这一个系列能坚持写完. 一.创建型 这个部分的主要任务就是使用各种方法创建(或组合)各种类型的对象,并向对象的使用者隐藏对象的创建过程。

本文给出了经典的23种设计模式的名录,包括他们的分类、名称、定义以及简要说明,方便大家能够快速的回忆起他们。也是前面写过的或者后面将要写的设计模式的一个目录。更是为了能督促自己能将这一个系列能坚持写完.

一.创建型

这个部分的主要任务就是使用各种方法创建(或组合)各种类型的对象,并向对象的使用者隐藏对象的创建过程。

 

1.抽象工厂模式(Abstract Facory Pattern)

定义一个接口(抽象工厂),用于创建一系列相关或相互依赖的对象,而不需要指定它们的具体类型.

       在应用抽象工厂过程中,组件通过一系列的抽象工厂决定最终的结构,而组件的使用者则必须选择使用其中一个抽象工厂来创建自己所需结构的组件对象.抽象工厂一般扮演组件结构标准制度者的角色.

       请参考*****

 

2.生成器模式(Builder Pattern)

将一个复杂对象的构建与 它的表示分开,使得同样的构建过程可以创建出不同的对象.

     与抽象工厂相似,在生成器模式中,组件同样是通过不同的生成器创建不同结构的对象,但不同的是,抽象工厂类型的接口是相同的,而生成器模式中可以通过不同的搭配构建不同结构的对象,相对于抽象工厂模式会更加灵活,但组件的使用者必须更加了解结构的细节.

      请参考****

3.工厂方法模式(Factory Method Pattern)

定义一个创建对象的接口,让子类(具体的创建者)决定实例化哪个类型的对象,目的是将对象的创建推迟到子类中完成,并向对象的使用者隐藏创建对象的过程与具体类型.

       对于一系列基于相同接口的子类型,可以通过使用工厂方法模式对使用者隐藏它们的具体类型和创建过程,而对于组件的使用者来讲,则可以简化对这一系列组件类型的应用.

      请参考****

4.原型模式(Prototype Pattern)

用原型模式实例指定创建对象的种类,并且通过复制这个原型来创建新的对象.

       通过一个对象的复制创建更多的对象,这样有两方面的优势:一是可以隐藏复杂对象的创建过程,而是可以提高对象的创建效率.

     原型模式中复制对象时经常使用对象的Clone()方法来完成,在C#中,你可以通过实现ICloneable接口来实现.

    请参考***

5.单件模式(Singleton Pattern)

确保一个类只有一个实例,并提供一个全局访问点.

       请参考***

二.结构型

结构型一般用于软件的架构设计,它们让一个软件体系更富有弹性,使之更容易进行修改、扩展和维护。

1.适配器模式(Adapter Pattern)

创建一个适配器组件作为中间人,它提供接口的转换功能,使两个不相关的或不兼容的组件可以一起工作.

      请参考***

 

2.桥接模式(Bridge Pattern)

将抽象部分与它的实现部分分开,使它们都可以独立地变化.

     请参考***

3.组合模式(Composite Pattern)

将对象组合成树状结构来表现”整体/部分”层次结构,使用客户可以采用一致的方式来处理个别对象以及对象组合.

      请参考***

4.装饰者模式(Decorator Pattern)

动态地将功能添加到对象上,相比生成子类更灵活、更富有弹性。

     请参考设计模式学习--装饰者模式(Decorator Pattern)

5.外观模式(Facade Pattern)

为子系统中的一组接口提供一个一直的接口,定义了一个高层接口,这个接口使得这一子系统更加容易使用.

     批处理的工作方式.请参考***

6.享元模式(Flyweight Pattern)

定义:运用共享技术有效的支持大量”轻量级”的对象.使用享元模式时,我们只创建一个实例来管理大量的虚拟对象.

     请参考****

7.代理模式(Proxy Pattern)

定义:为其它对象提供一个代理(占位标识)以控制对这个对象的访问.

       代理模式一般用于处理开销很大的对象,这时,应该根据需要在必要的时候才创建或载入这些资源.

       比如,当你打开一个比较大型的、图文并茂的Work文档,你会发现文字会很快的显示出来,而图片可能在你查看到它的时候才会显示出来。在这里,我们可以认为Word在处理文档时使用了代理模式.我们知道,图片的处理对于系统来讲,开销会比较大,所以,在word中,当我们打开一个大型文档时,图片的位置会有一个占位符(代理),然后在需要时(比如我们查看到这部分时),才会加载这些图片,这样就节约了系统资源,提高了处理速度与运行效率.

       请参考****

三、行为型

行为模式用于做一些具体的工作,如实现某个软件功能,它们的作用往往比前两种类型的设计模式更加直观。

1.职责链模式(Chain Of Responsibility Pattern)

定义:为解除请求的发送与接收之间的耦合,而使多个对象都有机会处理这个请求.将这些对象连成一条链,并沿着这条链传递该请求,直到一个对象处理它.

       就像在流水线上生产一样,一道工序中可能有多个工人在处理,如果有人处理了就转到下一道工序(或者就此完工),如果没有人加工它,它可能继续在流水线中流转,也可能做其它类型的处理.

      此模式一般用于操作系统或网络环境的应用.请参考****

 

2. 命令模式(Command Pattern)

定义:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可取消的操作.

        比如,在大型数据库系统中的日志(Log).日志用于记录对数据库的一切操作,需要时我们可以将数据库恢复到任一时刻的状态.

3.解释器模式(Interpreter Pattern)

定义:为一种语言或一套语法创建解释器.

4.迭代器模式(Iterator Pattern)

定义:提供一种方法顺序访问一个集合中的各个元素,而又不需要暴露该对象的内部表示.

        请参考****

5.中介者模式(Mediator Pattern)

定义:用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显示地相互引用,从而使这些对象之间解耦,并可以独立地改变它们之间的交互.

         中介者模式经常使用在大型的系统中,用于各子系统或对象之间运行调度工作.你应该知道房屋中介和婚姻中介是怎么回事吧,这也差不多.

         请参考****

6.备忘录模式(Memento Pattern)

定义:在不被破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到保存状态.

        和命令模式不一样的是,备忘录虽然也保存对象的状态,但它并不是完整的、队列化的保存,而是保存某一时刻的对象状态,在你需要恢复时,只能恢复到保存过的时刻。比如保存游戏进度。

       请参考****

7.观察者模式(Observer Pattern)

定义:观察者模式定义了对象之间一对多的依赖关系,当这个对象的状态改变时,它会通知所有的依赖者(观察者)接收新的数据,这些依赖者对象会根据最新的数据做出相应的更新.

         请参考*****

8.状态模式(State Pattern)

定义:允许对象在内部状态改变时改变它的行为和特性,对象看起来好像修改了它的类.

       请参考设计模式学习--状态模式(State Pattern)

9.策略模式(Strategy Pattern)

定义:定义了一系列的算法,将它们独立封装,并且可以相互替换使用,这些算法独立于使用它们的组件,可以在组件中通过组合,灵活的改变其算法类型.

      请参考项目重构--使用策略模式

10.模板方法模式(Template Method Pattern)

定义:定义一系列的算法结构,并延续到其子类,子类在不改变算法结构的同时,可以定义自己的具体实现.

     请参考*****

11.访问者模式(Visitor Pattern)

定义:对于组件中的操作,可以在不改变类型定义的前提下重新定义操作的具体实现.

    请参考****

目录
相关文章
|
7月前
|
弹性计算 资源调度 算法
阿里云 Elasticsearch Serverless 检索增强型8.17 版免费邀测!
阿里云Elasticsearch Serverless检索增强型8.17版现已开放邀测
423 59
|
10月前
|
机器学习/深度学习 数据采集 人工智能
GeneralDyG:南洋理工推出通用动态图异常检测方法,支持社交网络、电商和网络安全
GeneralDyG 是南洋理工大学推出的通用动态图异常检测方法,通过时间 ego-graph 采样、图神经网络和时间感知 Transformer 模块,有效应对数据多样性、动态特征捕捉和计算成本高等挑战。
329 18
GeneralDyG:南洋理工推出通用动态图异常检测方法,支持社交网络、电商和网络安全
|
8月前
|
设计模式 Java 数据库
06.依赖倒置原则介绍
依赖倒置原则是面向对象设计六大原则之一,强调高层模块不应依赖低层模块,两者应依赖于抽象。通过依赖接口或抽象类而非具体实现,降低模块耦合度,提升系统灵活性和可维护性。本文详解该原则的概念、目标、思想及其实现方式(如依赖注入),并结合多数据库操作、用户购买家电、发送消息等实际案例,深入探讨其应用与优缺点。
605 4
|
9月前
|
存储 小程序 vr&ar
聊聊实时云渲染对VR大空间文旅的赋能-点量云流
实时云渲染如何赋能VR大空间文旅体验。传统VR体验多为固定座椅观看,缺乏互动;如今的VR体验店则允许用户在一定区域内自由移动并进行互动。然而,高精度VR模型对显卡要求极高,单靠VR设备难以实现流畅运行。实时云渲染通过B/S架构解决了这一问题。 具体实施步骤包括:1)准备高性能服务器、显卡及VR模型;2)将3D模型存储于服务器,并安装实时云渲染软件,生成推流链接或二维码;3)VR眼镜端安装特定客户端App,连接服务器资源。
254 1
|
监控 网络协议 Ubuntu
netstat,Linux 下的网络状态监控工具
Netstat 是 Linux 系统中的强大网络分析工具,用于查看网络配置和活动,如端口监听、网络连接和路由信息。通过基本命令 `netstat [options]` 可实现多种操作,例如 `-a` 显示所有端口,`-l` 显示监听端口,`-s` 展示协议统计信息。结合 `-p` 选项可查看占用端口的进程,而监控网络连接状态则可用 `-nt` 加 `grep ESTABLISHED` 查看已建立的连接。要深入了解和使用更多功能,可查阅 `man netstat`。
390 0
|
8月前
|
机器学习/深度学习 人工智能 自然语言处理
AI浪潮下,我们需要什么样的创新型人才?
本文探讨了AI浪潮下创新型人才的需求与培养路径。随着生成式人工智能(GAI)技术的突破,AI已渗透至各领域,重塑传统行业并带来机遇与挑战。创新型人才需具备跨学科知识融合、持续学习、创新实践能力及伦理责任感。GAI认证作为权威标准,助力人才技能提升和企业招聘。未来应加强跨学科教育、实践教学、持续学习与伦理教育,以培养更多适应AI时代的创新型人才。
|
机器学习/深度学习 人工智能 边缘计算
软件测试的未来:自动化与AI的融合
在数字化时代的浪潮中,软件测试作为确保产品质量的关键步骤,正经历着前所未有的变革。随着技术的发展,自动化测试和人工智能(AI)的结合不仅提升了测试的效率和准确性,还极大地扩展了测试的范围和深度。本文将探讨自动化测试的最新趋势、AI如何重塑测试流程,以及未来软件测试可能达到的新高度。
|
SQL 关系型数据库 分布式数据库
实时计算 Flink版操作报错之全量采集没有采集完成,一直出现Stopped reading binlog after 0 events, no new offset was recorded,是什么原因
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
存储 算法 Linux
CTF—GIF文件格式、隐写方法及案例
CTF—GIF文件格式、隐写方法及案例
802 0
|
算法 C++
90 C++ - 常用拷贝和替换算法
90 C++ - 常用拷贝和替换算法
78 0