当前位置: 首页 > article >正文

【从零开始学习计算机科学】设计模式(二)工厂模式、抽象工厂模式、单例模式、建造者模型、原型模式

【从零开始学习计算机科学】设计模式(二)工厂模式、抽象工厂模式、单例模式、建造者模型、原型模式

    • 工厂模式
      • 主要特点
      • 类型
      • 适用场景
    • 抽象工厂模式
      • 主要特点
      • 工作原理
      • 适用场景
      • 举例
      • 优点
      • 缺点
      • 总结
    • 单例模式
      • 主要特点
      • 工作原理
      • 适用场景
      • 优点
      • 缺点
      • 总结
    • 建造者模式
      • 主要特点
      • 工作原理
      • 适用场景
      • 优点
      • 缺点
      • 总结
    • 原型模式
      • 主要特点
      • 工作原理
      • 适用场景
      • 优点
      • 缺点
      • 总结

工厂模式

工厂模式(Factory Pattern)是一种常用的创建型设计模式,目的是通过工厂方法来创建对象,而不是直接在客户端代码中实例化对象。工厂模式将对象的创建与使用分离,使得客户端无需了解创建对象的具体过程,从而减少了系统之间的耦合。

主要特点

  • 封装对象创建:客户端不直接创建对象,而是通过工厂类来生成对象。
  • 解耦:客户端只关心需要什么类型的对象,而不需要知道具体的创建过程或对象的实现细节。

类型

  • 简单工厂模式:由一个工厂类决定实例化哪个产品。
  • 工厂方法模式:每个子类负责实例化具体的产品,工厂方法将创建工作委托给具体的子类。
  • 抽象工厂模式:提供一个接口用于创建一系列相关或相互依赖的产品,而不需要指定具体类。

适用场景

  • 当系统不想或不能依赖于产品的具体实现时。
  • 客户端只关心产品类型,而不关心具体如何创建时。
  • 产品类的创建逻辑复杂,需要封装的情况。

抽象工厂模式

抽象工厂模式是一种创建型设计模式,它提供了一个接口,用于创建一系列相关或相互依赖的对象,而无需指定具体类。换句话说,抽象工厂模式允许客户端通过一个工厂接口来创建多个产品,而不需要知道具体的产品类。

主要特点

  • 产品族:抽象工厂模式关注创建一组相关的产品。每个具体工厂可以生产一系列相关的产品。
  • 解耦产品创建:客户端通过工厂接口来获取不同类型的产品,而不关心这些产品的具体实现。

工作原理

  • 定义一个抽象工厂接口,声明一组方法用于创建产品。
  • 为每一组相关的产品创建一个具体工厂类来实现这个接口。
  • 产品由多个接口定义,每个产品系列都会有一个对应的具体产品类。

适用场景

  • 当需要创建多个相关对象,并且系统不希望依赖于具体的类时。
  • 当产品族(系列)较多,并且产品间有相互依赖时,抽象工厂模式可以很好的组织和管理这些对象的创建。
  • 当系统需要切换不同的产品族时,抽象工厂可以提供一个统一的接口。

举例

如果一个系统需要支持多种主题(如深色、浅色主题),每种主题可能包含不同类型的按钮、菜单、对话框等。使用抽象工厂模式,可以为每种主题创建一组相关的界面组件,而客户端通过工厂接口获取这些组件,而无需知道具体实现。

优点

  • 客户端与具体类解耦,灵活性较强。
  • 易于

http://www.kler.cn/a/592954.html

相关文章:

  • 基于ssm学科竞赛小程序的设计及实现(源码+lw+部署文档+讲解),源码可白嫖!
  • 数据结构:二叉树(一)·(重点)
  • dockercompose如何重启单个服务和所有服务
  • 【平台优化】大数据集群一个客户端参数引起的任务性能差的问题
  • 【RabbitMQ】RabbitMQ如何保证消息不丢失?
  • 分布式唯一ID生成算法——MongoDB ObjectId 算法
  • 企业微信群聊机器人开发
  • PyQt6加载视频方法示例
  • 单片机学完开发板,如何继续提升自己的技能?
  • 如何在项目中有效管理设计模式的复杂性
  • 【漫话机器学习系列】149.ROC 曲线(Receiver Operating Characteristic Curve)
  • HarmonyOS Next中的弹出框使用
  • DockerTLS加密/不加密传输
  • 科技快讯 | AI助手也“摆烂”;国内独有“玻璃光盘”技术发布;“全国消协智慧315平台”正式上线
  • Leetcode-100 回溯法-全排列
  • 实用工具-Another Redis Desktop Manager介绍
  • 2023南京理工大学计算机复试上机真题
  • 安全基线-rm命令防护
  • 【论文阅读】Adversarial Patch Attacks on Monocular Depth Estimation Networks
  • 【总结】Pytest vs Behave,BDD 测试框架哪家强?