23种设计模式使用场景分析

概述

网上关于设计模式的文章特别多,就不赘述了,我认为在敲代码的时候知道根据当前代码结构选择合适的设计模式是最重要的,知道了要使用哪个设计模式,就可以上网随便百度一下,

简述

对23中设计模式的分类

创建型模式

这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。

工厂模式

  • 使用场景

一个调用者要创建一个对象,但是不太确定这个对象的类型,或者说该对象类型有多个想日后方便扩展,比如数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时,此时可以使用工厂模式,当使用oracle数据库时,需要oracle数据库子类实现接口,当想要增加mysql数据库时,再增加mysql数据库子类实现接口,

  • 核心角色

抽象产品:定义了产品的共同接口或抽象类,它可以是具体产品类的父类或者接口,规定了产品对象的共同方法,

具体产品:实现了抽象产品接口,定义了具体产品的具体行为,

具体工厂:声明了创建产品的具体方法,多个产品可以在工厂中创建多个方法,它可以有多个方便用户创建不同类型的产品,比如创建水果类型的方法和创建不同植物类型的方法,

  • 缺点

每增加一种类型的产品时,都需要增加一个具体产品类和具体子类工厂,使得系统中的类个数成倍增加,另外增加了系统具体类之间的依赖,

抽象工厂模式

实际上是在工厂模式的基础上横向增加了一个产品类型维度,比如水果抽象工厂+水果类型,植物抽象工厂+植物类型,增加了多个产品类型后,在多种产品簇上层抽象了另外一个工厂,

  • 使用场景

系统的产品有多个产品簇,举例:在一个房间里有植物类和水果类,当同时消耗系统里面的植物和水果时,因为产品簇不一样,需要在不同产品簇的工厂方法顶层再抽象一个抽象类,在这个顶层抽象工厂聚合多个同类产品,当一个产品簇中的多个对象被设计成一起工作时,他能保证客户端始终只是用同一个产品簇中的对象,(不同产品簇对象可以有联系)

  • 核心角色

抽象产品:定义了一组产品对象的共同接口或抽象类,描述了产品对象的公共方法,

具体产品:实现了抽象产品接口,定义了具体产品的具体行为,

抽象工厂:声明了一组用于创建产品簇对象的方法,每个方法对应一种产品簇类型,抽象工厂可以是接口或者抽象类,

具体工厂:实现抽象工厂接口,负责创建具体产品对象,

  • 缺点

产品簇扩展困难,需要增加一个系列的产品类,还要增加该产品类的工厂类,以及在顶层抽象工厂类中增加抽象方法,

单例模式

  • 使用场景

  • 核心角色

  • 缺点

建造者模式

  • 使用场景

  • 核心角色

  • 缺点

原型模式

  • 使用场景

  • 核心角色

  • 缺点

结构型模式

适配器模式

  • 使用场景

  • 核心角色

  • 缺点

桥接模式

  • 使用场景

  • 核心角色

  • 缺点

过滤器模式

  • 使用场景

  • 核心角色

  • 缺点

组合模式

  • 使用场景

  • 核心角色

  • 缺点

装饰器模式

  • 使用场景

  • 核心角色

  • 缺点

外观模式

  • 使用场景

  • 核心角色

  • 缺点

享元模式

  • 使用场景

  • 核心角色

  • 缺点

代理模式

  • 使用场景

  • 核心角色

  • 缺点

相关推荐
George_Ye10 小时前
同一本书,一人一份:我如何设计 AI 个性化扫书报告
设计模式
莫得感情 o20 小时前
设计模式 22 · 三个冷门模式:中介者、访问者、解释器
java·设计模式
AI人工智能+电脑小能手2 天前
大白话说Java设计模式-08-建造者模式(业务实战篇)
java·设计模式·建造者模式·架构设计·对象构建
AustinXu2 天前
从 Claude Code 到 Claude Tag,Harness Engineering 走到了组织这一层
设计模式·团队管理
剧中有戏2 天前
单例模式从入门到精通:一个数据库连接池的完整剖析
设计模式
胡萝卜术2 天前
编译期与运行期的双重防线:从 TypeScript 类型之争到 LLM 输出的自动化择优
前端·设计模式·面试
货拉拉技术2 天前
重塑 Agent 度量衡:基于 LLM-as-a-Judge 的离线评估体系与实践
算法·设计模式
KhalilRuan2 天前
设计模式小记
设计模式
卡牌RWA研究院2 天前
Relique:一张精品卡牌如何从收藏品变成可交易的链上资产?
设计模式·金融·区块链·创业创新
剧中有戏3 天前
抽象工厂模式从入门到精通:一个多云存储案例的完整剖析(修订版)
设计模式