简单工厂模式与策略模式的区别

相似之处:都用于松耦合

不同之处:

简单工厂模式:只关注传入的参数,对于后续的具体执行逻辑不关注(工厂会自动根据传入的参数类型生产对应的产品)

核心目的:隐藏创建对象的具体逻辑,客户端只需传入参数,由工厂决定实例化哪个具体类。
使用场景:适用于产品类较少,且不会频繁增加新产品类的情况。它简化了客户端的使用,但违反了开闭原则(对扩展开放,对修改关闭),因为增加新产品时需要修改工厂类。
示例:不同的登录类型(手机号、微信、账号密码),客户端只需指定类型,工厂负责创建。

策略模式:
核心目的:定义一系列算法,将每个算法封装起来,并使它们可以相互替换。策略模式让算法的变化独立于使用算法的客户。
使用场景:当有多种算法完成同一任务,且算法之间可互换时。这种模式允许运行时动态选择算法,易于扩展新的算法。
示例:排序算法的选择,用户可以根据需要选择快速排序、冒泡排序等,算法的切换不影响客户端代码。

接口(Interface):

用途:定义一个行为规范,强调"能做什么",不涉及"如何做"。接口中只能包含未实现的方法声明、常量定义。

使用场景:

当需要实现多继承时(Java中类不能多继承,但可以实现多个接口)。

定义不同类之间的通用行为,强调的是功能的契约而非具体实现。

当你想要强制要求子类实现某些方法,但不需要提供默认实现时。
抽象类(Abstract Class):

用途:提供部分实现,可以有抽象方法(未实现的方法),也可以有具体实现的方法。

使用场景:

当多个类共享一部分实现时,可以将这部分实现放在抽象类中,避免重复代码。

当你需要定义一个基类,希望子类遵循其基本结构,但又允许子类覆盖或扩展其行为时。

如果你有一组相关的接口需要实现,可以考虑用抽象类提供一些基础实现,减少子类的编写负担。

结合设计模式的使用

在实现简单工厂模式时,通常会使用接口或抽象类来定义产品的类型,这样工厂可以返回任何实现了该接口或继承了该抽象类的具体产品。

策略模式中,策略(算法)通常被定义为接口,具体的策略类实现这个接口,而上下文类通过持有策略接口引用,可以在运行时切换策略。

综上所述,选择接口还是抽象类,关键在于是否需要提供默认实现以及是否强调行为的规范性。设计模式的应用则需根据实际的业务需求和扩展性考虑来决定。

相关推荐
钱栈up14 小时前
从 macOS 切回 Windows,我用 5 个免费工具把 80% 操作习惯搬了回来
windows·macos·策略模式
kunicoding3 天前
C++ 策略模式实战:写一个可以“一键换输出“的日志系统
开发语言·c++·策略模式
峥嵘life4 天前
Android16 开机后立即打开相机闪退问题分析与解决总结
android·开发语言·数码相机·策略模式
智慧城市20305 天前
关键供应商连续交付不合格批次,说明质量风险可能持续存在。企业需要建立“批次隔离、加严检验、驻厂遏制、复检放行、供应商升级”的处置闭环,同时统筹保供。
数据分析·策略模式·战略咨询·流程管理
happy_baymax6 天前
Dell G3 3590 黑苹果实战:OpenCore 1.0.8 + NullMoth 驱动让 GTX 1660 跑起 Metal
策略模式
遇码6 天前
macOS 触摸板捏合在 GPUI 里无响应:vendor 打补丁,把手势合成为 cmd+滚轮事件
rust·图形渲染·策略模式·桌面应用·gpui
mmsx7 天前
Android 架构分层:MVVM 与 MVP 共存,网络层怎么切
android·策略模式·mvvm·mvp
博风7 天前
7、设计模式应用举例:策略模式:加密、解密文件
设计模式·策略模式
mmsx7 天前
Android 本地优先的三级语义理解降级链
android·数码相机·策略模式
早点睡觉好了7 天前
LangChain 源码入门 02:消息、ChatPromptTemplate 与 Chat Model 调用链
ai·langchain·策略模式