24种设计模式

简介: Factory Pattern(工厂模式):1. 创建对象的接口,封装对象的创建;2. 使具体化类的工作延迟到子类中。(维护一类对象) AbstractFactory Pattern(抽象工厂 模型):该模式将一组对象的创建封装到一个用于创建对象的类中。

Factory Pattern(工厂模式):1. 创建对象的接口,封装对象的创建;2. 使具体化类的工作延迟到子类中。(维护一类对象)

AbstractFactory Pattern(抽象工厂 模型):该模式将一组对象的创建封装到一个用于创建对象的类中。(解决的问题:要创建一组或者相互依赖的对象)。

 

Singleton Pattern(单例模式):该模式在面向纯粹的面向对象的范式中用于创建唯一的实例,值得注意的是Singleton不能被实例化,因此将其构造函数声明为protected或private类型。Singleton Pattern经常与Factory Pattern结合使用,因为Factory对象只能有一个。

 

Builder Pattern(创建者模式):将一个复杂的对象的构建与它的表示分离,使得同样的构建构成可以创建不同的表示。如建筑师画图纸,而工人建造房屋。

 

Prototype Pattern(原型模式):提供一个通过已存在对象进行新对象创建的接口(clone)。(浅拷贝和深拷贝)

 

 

Bridge Pattern(桥梁模式):将抽象部分与实现部分分开实现,使他们都可以独立地变化,并使用组合的方式将多维度的抽象方法联系在一起。比如咖啡分小杯、中杯、大杯以及加奶和不加奶,则抽象部分为:小杯、中杯、大杯,行为为:加奶和不加奶。

Adapter Pattern(适配器模式):适配就是由“源”到“目标”的适配,而当中链接两者的关系就是适配器。它负责把“源”过度到“目标”。将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。适配器模式分为两种:① 面向类的设计模式;② 面向对象的设计模式。

① 面向类的适配器:该模式使用继承和接口实现的方式复用需要适配器的类。

② 面向对象的适配器:该模式使用组合的方式实现需要复用的类。

 

 Decorator模式(装饰模式):动态地给一个对象添加一些额外的职责。

 

Composite模式(组合模式):将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。

Flyweight模式(享元模式):使用共享技术实现元素的共享。

Facade模式(外观模式):要求一个子系统的外部与其内部的通信必须通过一个统一的Facade对象进行。Facade模式提供一个高层次的接口,使得子系统更易于使用。  

 

 Proxy模式(代理模式):不通过要操作对象本身去操作这个对象,而是通过一个能控制这个对象的对象(代理)去操作这个对象。

 

Template模式(模板模式):逻辑框架相同,但是对某一个业务逻辑(算法实现)在不同的对象中有不同的实现方式。Template采用继承的方式实现这一点(strategy模式采用组合的方式去解决)。

 

Strategy模式(策略模式):解决与Template模式相同(类似)的问题。Strategy模式将逻辑(算法)封装到一个类中,通过组合的方式将具体算法的实现在组合对象中实现,通过委托的方式将抽象接口的实现委托给组合对象实现。

 

State模式(状态模式):人或事物有不同的状态,每种状态又有其特定的表现,在这些状态下又使一个状态转移到另一个不同的状态。

 

Observer模式(观察者模式):Observer模式定义对象间的一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。(如视图-文档)

Memento模式(备忘模式):在不破坏封装性的情况下,捕获并保存一个类的内部状态,可以利用该保存的状态实施恢复操作。

 

Mediator模式(中介者模式):用一个中介对象来封装一系列关于对象交互行为。如MVC中的Controller。

 

Command模式(命令模式):命令模式是对命令的封装。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。

Visitor模式(访问者模式):在不改变原有类结构的基础上不断添加新的功能。缺点:破坏了封装性;Concretement扩展困难:每添加一个Element的子类,就要修改Visitor的接口,使得可以提供给这个新增加的子类的访问机制。

Chain of Responsibility模式(职责链模式):Chain of Responsibility(CoR) 是用一系列类(classes)试图处理一个请求request,这些类之间是一个松散的耦合,唯一共同点是在他们之间传递request. 也就是说,来了一个请求,A类先处理,如果没有处理,就传递到B类处理,如果没有处理,就传递到C类处理,就这样象一个链条(chain)一样传递下去。

 

Iterator模式(迭代模式):提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。具体应用容器类(Vector、Set等)。

Interpreter模式(解释器模式):给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

解释器模式需要解决的是,如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。实例应用:正则表达式。

最后:各个模式的使用不一定是相互独立,而是可以融合。

目录
相关文章
|
设计模式 Java Spring
动态代理详解
动态代理详解    动态代理它可以直接给某一个目标对象生成一个代理对象,而不需要代理类存在。    动态代理与代理模式原理是一样的,只是它没有具体的代理类,直接通过反射生成了一个代理对象。    动态代理生成技术:        1. 基于jdk提供一个Proxy类,可以直接给实现某接口的实现类直接生成代理对象。
1150 0
|
4天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
282 116
|
19天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
6天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
406 38
Meta SAM3开源:让图像分割,听懂你的话
|
13天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
670 220
|
1天前
|
Windows
dll错误修复 ,可指定下载dll,regsvr32等
dll错误修复 ,可指定下载dll,regsvr32等
132 95
|
11天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1659 158