简单工厂模式概述

简单工厂模式是一种创建型设计模式,它封装了对象的具体创建逻辑,通过一个共同的工厂类来创建不同类型的对象。该模式使得系统可以在不知道具体产品类的情况下创建对象。简单工厂模式通常包含三个角色,分别是工厂类(SimpleFactory)、抽象产品类(Product)和具体产品类(ConcreteProduct)。

简单工厂模式实现步骤

要实现简单工厂模式,可以按照以下步骤进行:

1. 定义一个抽象产品类(Product),定义产品的公共接口,该接口将由具体产品类实现。

2. 创建具体产品类(ConcreteProduct),实现抽象产品类定义的接口。

3. 创建工厂类(SimpleFactory),该类通常包含一个静态方法或者工厂方法,用于根据不同的条件来创建具体产品对象。

示例代码

下面是一个简单的示例代码,演示了如何使用简单工厂模式来创建不同类型的计算器对象:

#include<stdio.h>

// 抽象产品类
typedef struct _Calculator {
    int (*calculate)(int, int);
} Calculator;

// 具体产品类
int add(int a, int b) {
    return a + b;
}

int subtract(int a, int b) {
    return a - b;
}

// 简单工厂类
Calculator* createCalculator(char operator) {
    Calculator* calculator = NULL;
    switch (operator) {
        case '+':
            calculator = (Calculator*)malloc(sizeof(Calculator));
            calculator->calculate = add;
            break;
        case '-':
            calculator = (Calculator*)malloc(sizeof(Calculator));
            calculator->calculate = subtract;
            break;
        default:
            printf("Unsupported operator\n");
            break;
    }
    return calculator;
}

int main() {
    char operator;
    printf("Enter operator (+ or -): ");
    scanf("%c", &operator);
    Calculator* calculator = createCalculator(operator);
    if (calculator != NULL) {
        int a, b;
        printf("Enter two numbers: ");
        scanf("%d %d", &a, &b);
        int result = calculator->calculate(a, b);
        printf("Result: %d\n", result);
    }
    return 0;
}

该示例代码中,先定义了一个抽象产品类 Calculator,其中包含一个指向计算方法的函数指针。然后,定义了两个具体产品类 add 和 subtract,分别实现了 Calculator 的 calculate 方法。最后,在简单工厂类 createCalculator 中,根据不同的运算符创建不同的具体产品对象,并返回相应的对象指针。在主函数中,通过用户输入的运算符创建相应的计算器对象,然后根据用户输入的两个数执行对应的计算操作并输出结果。