工厂模式与策略模式的区别?

server/2024/10/22 15:38:35/

 工厂模式:设计模式--工厂模式-CSDN博客

策略模式设计模式--策略模式-CSDN博客

如果想具体了解工厂模式和策略模式,请移步上述博客~ 


工厂模式与策略模式是两种常见的设计模式,这两种设计模式有几点较相似:

  • 封装性

    • 工厂模式:封装了对象的创建过程,客户端只需与工厂交互,而不需了解具体的类。
    • 策略模式:封装了算法或行为的实现,客户端通过上下文对象使用策略,但不需了解具体的策略实现细节。
  • 解耦

    • 工厂模式:通过工厂方法解耦了对象的创建与使用,客户端不需要知道具体的类,只需知道工厂接口。
    • 策略模式:通过策略接口解耦了算法的使用与具体实现,客户端可以通过上下文对象使用不同的策略而无需了解具体的算法。
  • 可扩展性

    • 工厂模式:添加新的产品只需扩展工厂类或工厂方法,而不需要修改客户端代码。
    • 策略模式:添加新的策略只需实现策略接口并在上下文中使用新的策略,而不需要修改客户端代码。

虽然工厂模式和策略模式是两种常见的设计模式,但是它们在设计目的和使用方式上有明显的区别。

1. 目的

  • 工厂模式:创建型模式,主要目的是创建对象。它通过工厂方法或工厂类来封装对象的创建过程,使得客户端代码可以在不需要知道具体类的情况下创建对象。工厂模式关注的是如何创建对象,而不是对象的行为。

  • 策略模式:行为型模式,主要目的是定义一系列算法或行为,并将每一个算法或行为封装在一个独立的策略类中,使得算法可以相互替换。策略模式关注的是算法或行为的选择和切换,而不是对象的创建。

2. 结构

  • 工厂模式

    • 简单工厂模式:一个工厂类根据提供的信息决定创建哪个具体产品类的实例。
    • 工厂方法模式:定义一个创建对象的接口,由子类决定实例化哪个具体类。工厂方法模式通过子类化来创建对象。
    • 抽象工厂模式:提供一个接口,用于创建一系列相关或依赖的对象,而无需指定具体类。
  • 策略模式

    • 策略接口:定义一个公共的算法接口。
    • 具体策略类:实现策略接口的具体算法。
    • 上下文:持有一个策略对象的引用,并调用策略对象的方法来完成某种功能。

3. 使用场景

  • 工厂模式:适用于需要创建多个实例且这些实例具有相同的接口但不同的实现时。例如,在构建系统中,根据配置文件动态创建不同类型的对象(如图形、数据库连接等)。

  • 策略模式:适用于需要在运行时动态选择算法或行为时。例如,根据不同的业务需求选择不同的折扣策略、排序算法等。

4. 实现

  • 工厂模式

    • 通过工厂类(或工厂方法)来创建对象。
    • 客户端代码不需要知道具体的类名,只需知道工厂的接口或方法即可。
    • 通过不同的工厂类或方法创建不同的具体产品对象。
  • 策略模式

    • 通过定义策略接口和多个具体策略类来实现。
    • 上下文类持有一个策略对象的引用,并委托策略对象执行具体的算法或行为。
    • 可以在运行时切换策略来改变算法的行为。

5.解决问题

  • 工厂模式:创建型的设计模式,它接受指令,创建出符合要求的实例;它主要解决的是资源的统一分发,将对象的创建完全独立出来,让对象的创建和具体的使用客户无关。主要应用在多数据库选择,类库文件加载等。
  • 策略模式是为了解决的是策略的切换与扩展,更简洁的说是定义策略族,分别封装起来,让他们之间可以相互替换,策略模式让策略的变化独立于使用策略的客户。

工厂模式相当于黑盒子,策略模式相当于白盒子; 


http://www.ppmy.cn/server/111391.html

相关文章

信息安全---(七)访问控制技术原理与应用

在使用本博客提供的学习笔记及相关内容时,请注意以下免责声明:信息准确性:本博客的内容是基于作者的个人理解和经验,尽力确保信息的准确性和时效性,但不保证所有信息都完全正确或最新。非专业建议:博客中的…

3、DjangoAdmin导出excel和csv文件

一、导出Excel 1、安装openpyxl库 2、admin文件 # 导入openpyxl库中的Workbook类,用于创建Excel文件 from openpyxl import Workbook # 导入Django的admin模块,用于在Django admin后台注册和管理模型 from django.contrib import admin # 导入…

2024最新最全面的JMeter 做接口加密测试

JMeter 怎么做接口的加密? JMeter如果需要做加密测试,是需要加密类型对应的jar包的。本文以MD5,加密作为教程。 1、在Test Plan 引用jar包; 2、添加BeanShell Sampler取样器,并输入调用代码 import md5.mymd5;//调用jar包 String…

excel规划求解结合vba宏笔记

目录 概念与配置 规划求解定义 excel设置规划求解 宏的基本操作 excel批量进行规划求解案例 加载规划求解模块 宏的设置 宏录制vba 其他案例 概念与配置 规划求解定义 运用“规划求解”定义并求解问题 - Microsoft 支持 excel设置规划求解 EXCEL规划求解的简明教程…

浅析SVG无功补偿器在新能源发电中的应用

引言 随着新能源技术的不断进步,光伏发电已经崛起为未来能源发展的一个关键领域,各地纷纷建立起越来越多的光伏电站。然而,光伏发电领域仍面临诸多挑战,包括电网电压不稳定、发电过剩以及电压波动等问题。在这样的背景下&#xf…

最新黑名单查询录入系统_全开源源码

最新黑名单查询录入系统_全开源源码 前端html 后端layui 操作部分都采用API接口的方式实线 集结了layui表格的多数据操作,添加,批量删除,分页,单项删除 后台数据修改采用绑定参数的形式来进行修改可以很好的预防数据库注入…

Unity(2022.3.41LTS) - UI详细介绍-画布

目录 零. 简介 一、图像的基本属性 二、图像的类型 三、图像的使用方法 四、代码控制图像 五、优化和注意事项 零. 简介 在 Unity 中,图像(Image)是一种常用的 UI 元素,用于显示静态图片或 Sprite(精灵图&#…

COB超微小间距LED显示屏是什么,它的性价比怎么样,市场大有可为

COB(Chip on Board)技术最早发源于上世纪60年代,是将LED芯片直接封装在PCB电路板上,并用特种树脂做整体覆盖。COB实现“点” 光源到“面” 光源的转换。点间距有P0.3、P0.4、P0.5、P0.6、P0.7、P0.9、P1.25、P1.538、P1.5625、P1.…