设计模式-01.简单工厂方法

这是我尝试写的第一篇文章,以软件开发的设计模式开始,记录一下自己的理解与心得,方便以后回过头来查看。以简单工厂开始:

什么是简单工厂?

简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,它提供了一种简单的方法来创建对象,而不需要直接暴露对象的创建逻辑给客户端。

UML 类图

以计算器为例子,拥有加减乘除功能,画出类图:

classDiagram class 简单工厂类{ +createOperate() 创建运算类 } 简单工厂类-->运算接口 运算接口 <|.. 加法类 运算接口 <|.. 减法类 运算接口 <|.. 乘法类 运算接口 <|.. 除法类 class 运算接口{ <<interface>> var numberA var numberB -Double calculate() } class 加法类{ -Double calculate() } class 减法类{ -Double calculate() } class 乘法类{ -Double calculate() } class 除法类{ -Double calculate() }

具体示例

swift 复制代码
// 运算符接口
protocol Operation {
    var numberA: Double { set get }
    var numberB: Double { setget }
    func calculate() -> Double
}

// 加法运算类
struct OperationAdd: Operation {
    var numberA: Double = 0.0
    var numberB: Double = 0.0
    func calculate() -> Double {
        return numberA + numberB
    }
}

// 减法运算类
struct OperationSub: Operation {
    var numberA: Double = 0.0
    var numberB: Double = 0.0
    func calculate() -> Double {
        return numberA - numberB
    }
}

// 乘法运算类
struct OperationMul: Operation {
    var numberA: Double = 0.0
    var numberB: Double = 0.0
    func calculate() -> Double {
        return numberA * numberB
    }
}

// 除法运算类
struct OperationDiv: Operation {
    var numberA: Double = 0.0
    var numberB: Double = 0.0
    func calculate() -> Double {
        if numberB != 0 {
            return numberA / numberB
        }
        return 0
    }
}

// 简单工厂类
class OperationFactory {
    static func createOperate(_ operate: String) -> Operation? {
        switch operate {
        case "+":
            return OperationAdd()
        case "-":
            return OperationSub()
        case** "*":
            return OperationMul()
        case "/":
            return OperationDiv()
        default: return nil
        }
    }
}

// 客户端调用
// 加法运算
var addOperation = OperationFactory.createOperate("+")
addOperation?.numberA = 1
addOperation?.numberB = 2
addOperation?.calculate()

// 减法运算
var subOperation = OperationFactory.createOperate("-")
subOperation?.numberA = 1
subOperation?.numberB = 2
subOperation?.calculate()

// 乘法运算
var mulOperation = OperationFactory.createOperate("*")
mulOperation?.numberA = 1
mulOperation?.numberB = 2
mulOperation?.calculate()

// 除法运算
var divOperation = OperationFactory.createOperate("/")
divOperation?.numberA = 1
divOperation?.numberB = 2
divOperation?.calculate()

简单工厂方法总结

优点:

  • 将对象的创建逻辑集中在工厂类中,降低了客户端的复杂度。
  • 隐藏了创建对象的细节,客户端只需要关心需要创建何种对象,无需关心对象是如何创建的。
  • 可以通过修改工厂类来轻松添加新的产品类

缺点:

  • 如果产品的类太多,会导致工厂类中的代码变得很复杂,难以维护。
  • 添加新产品时,需要修改工厂类,也就是会在OperationFactory类中新增case语句,这违背了开闭原则。

总体而言,简单工厂模式适用于创建对象的逻辑相对简单,且产品类的数量较少的场景。对于更复杂的对象创建和对象之间的依赖关系,可以考虑使用其他创建型设计模式,如工厂方法模式或抽象工厂模式。

工厂方法

相关推荐
geovindu2 小时前
rust: Abstract Factory pattern
开发语言·后端·设计模式·rust·抽象工厂模式
Carl_奕然10 小时前
【智能体】Loop 的四种设计模式之:Event-Driven Loop(2026 最新版)
人工智能·驱动开发·python·设计模式
Carl_奕然10 小时前
【智能体】Loop 的四种设计模式之:Hill Climbing Loop(2026 最新版)
人工智能·python·设计模式
晚安code1 天前
设计模式入门:吃透 SOLID 原则与迪米特法则,再学 5 个高频模式
后端·设计模式
染指11101 天前
135.Agent-多Agent框架-LangChain多智能体(SubAgents子代理)
数据库·人工智能·设计模式·langchain·agent·agents
路弥行至2 天前
【Head First 设计模式】第 2 章:观察者模式 —— 用现代 C++ 重新解读“交互对象的松耦合
c++·经验分享·笔记·观察者模式·设计模式·入门教程·headfirst
YYYing.2 天前
【设计模式系列 (九) 】装饰器模式
c++·后端·设计模式·装饰器模式·c/c++
沫璃染墨2 天前
《从零入门Linux系统篇(五十六):线程篇·九——生产者消费者模型:从条件变量到BlockingQueue实现》
linux·服务器·c++·驱动开发·设计模式·架构·系统架构
c萱3 天前
AI产品经理——01基础认知篇
设计模式·prompt·aigc·产品经理·ai编程·gitcode·ai-native
YYYing.3 天前
【设计模式系列 (八) 】组合模式
c++·后端·设计模式·组合模式·c/c++