[c设计模式]抽象工厂模式 (from chatgpt)

您所在的位置:网站首页 c语言实现设计模式 [c设计模式]抽象工厂模式 (from chatgpt)

[c设计模式]抽象工厂模式 (from chatgpt)

2023-03-18 05:48| 来源: 网络整理| 查看: 265

抽象工厂模式是一种创建型设计模式,它允许客户端通过接口而不是具体类来创建相关对象的系列。在C语言中,我们可以使用函数指针和结构体来实现抽象工厂模式。

以下是一个抽象工厂模式的C语言示例:

#include #include // 抽象产品A typedef struct ProductA { char name[20]; int price; } ProductA; // 抽象产品B typedef struct ProductB { char name[20]; int quantity; } ProductB; // 抽象工厂接口 typedef struct AbstractFactory { ProductA *(*createProductA)(void); ProductB *(*createProductB)(void); } AbstractFactory; // 具体产品A1 typedef struct ConcreteProductA1 { ProductA productA; } ConcreteProductA1; // 创建具体产品A1的工厂函数 ProductA *createConcreteProductA1(void) { ConcreteProductA1 *pA1 = (ConcreteProductA1 *)malloc(sizeof(ConcreteProductA1)); pA1->productA.price = 100; sprintf(pA1->productA.name, "Product A1"); return (ProductA *)pA1; } // 具体产品B1 typedef struct ConcreteProductB1 { ProductB productB; } ConcreteProductB1; // 创建具体产品B1的工厂函数 ProductB *createConcreteProductB1(void) { ConcreteProductB1 *pB1 = (ConcreteProductB1 *)malloc(sizeof(ConcreteProductB1)); pB1->productB.quantity = 200; sprintf(pB1->productB.name, "Product B1"); return (ProductB *)pB1; } // 工厂1生产A和B typedef struct Factory1 { AbstractFactory factory; } Factory1; // 工厂1创建产品A的函数 ProductA *createProductA_Factory1(void) { return createConcreteProductA1(); } // 工厂1创建产品B的函数 ProductB *createProductB_Factory1(void) { return createConcreteProductB1(); } // 工厂2的具体产品A2 typedef struct ConcreteProductA2 { ProductA productA; } ConcreteProductA2; // 创建具体产品A2的工厂函数 ProductA *createConcreteProductA2(void) { ConcreteProductA2 *pA2 = (ConcreteProductA2 *)malloc(sizeof(ConcreteProductA2)); pA2->productA.price = 200; sprintf(pA2->productA.name, "Product A2"); return (ProductA *)pA2; } // 工厂2的具体产品B2 typedef struct ConcreteProductB2 { ProductB productB; } ConcreteProductB2; // 创建具体产品B2的工厂函数 ProductB *createConcreteProductB2(void) { ConcreteProductB2 *pB2 = (ConcreteProductB2 *)malloc(sizeof(ConcreteProductB2)); pB2->productB.quantity = 300; sprintf(pB2->productB.name, "Product B2"); return (ProductB *)pB2; } // 工厂2生产A和B typedef struct Factory2 { AbstractFactory factory; } Factory2; // 工厂2创建产品A的函数 ProductA *createProductA_Factory2(void) { return createConcreteProductA2(); } // 工厂2创建产品B的函数 ProductB *createProductB_Factory2(void) { return createConcreteProductB2(); } // 客户端 int main(void) { AbstractFactory *factories[2]; factories[0] = &(Factory1){ .factory = { createProductA_Factory1, createProductB_Factory1 } }; factories[1] = &(Factory2){ .factory = { createProductA_Factory2, createProductB_Factory2 } }; for (int i = 0; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3