最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Linux下C語言實現(xiàn)工廠模式方式

 更新時間:2025年06月10日 16:34:56   作者:隱身模式  
這篇文章主要介紹了Linux下C語言實現(xiàn)工廠模式方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

在嵌入式開發(fā)和系統(tǒng)編程中,良好的架構(gòu)設(shè)計 能有效提升代碼的可維護(hù)性、可擴(kuò)展性。雖然 C 語言不是面向?qū)ο笳Z言,但通過結(jié)構(gòu)體與函數(shù)指針等手段,我們依然可以實現(xiàn)經(jīng)典的設(shè)計模式。

本文將深入講解如何在 Linux 環(huán)境下使用 C 語言實現(xiàn)工廠模式(Factory Pattern),并結(jié)合實際案例說明其優(yōu)勢與應(yīng)用場景。

一、工廠模式簡介

什么是工廠模式?

工廠模式是一種創(chuàng)建型設(shè)計模式,用于隱藏對象創(chuàng)建邏輯,將實例化過程交由工廠類負(fù)責(zé)。

調(diào)用者只關(guān)心產(chǎn)品的“接口”,不關(guān)心具體實現(xiàn),從而實現(xiàn)解耦。

C 語言實現(xiàn)設(shè)計模式的挑戰(zhàn)

  • 沒有類和繼承
  • 無多態(tài)機(jī)制
  • 類型系統(tǒng)不如 C++ 靈活

解決辦法:

  • 使用 struct 模擬類
  • 使用函數(shù)指針模擬方法
  • 使用枚舉/注冊表實現(xiàn)工廠分發(fā)

二、實現(xiàn)簡單工廠模式(Simple Factory)

我們以“不同類型的傳感器”為例,定義一個統(tǒng)一的設(shè)備接口,由工廠創(chuàng)建不同的傳感器對象。

定義傳感器接口(device.h)

#ifndef DEVICE_H
#define DEVICE_H

typedef struct Device {
    void (*init)(void);
    void (*read)(void);
    void (*destroy)(struct Device* self);
} Device;

#endif

各類型傳感器實現(xiàn)(sensor_temp.c / sensor_humidity.c)

  • 溫度傳感器
#include <stdio.h>
#include <stdlib.h>
#include "device.h"

static void temp_init() {
    printf("溫度傳感器初始化完成\n");
}

static void temp_read() {
    printf("溫度傳感器讀取數(shù)據(jù):25°C\n");
}

Device* create_temp_sensor() {
    Device* dev = (Device*)malloc(sizeof(Device));
    dev->init = temp_init;
    dev->read = temp_read;
    dev->destroy = free;
    return dev;
}
  • 濕度傳感器
#include <stdio.h>
#include <stdlib.h>
#include "device.h"

static void humidity_init() {
    printf("濕度傳感器初始化完成\n");
}

static void humidity_read() {
    printf("濕度傳感器讀取數(shù)據(jù):60%%\n");
}

Device* create_humidity_sensor() {
    Device* dev = (Device*)malloc(sizeof(Device));
    dev->init = humidity_init;
    dev->read = humidity_read;
    dev->destroy = free;
    return dev;
}

定義工廠接口(factory.h / factory.c)

  • factory.h
#ifndef FACTORY_H
#define FACTORY_H

#include "device.h"

typedef enum {
    SENSOR_TEMP,
    SENSOR_HUMIDITY
} SensorType;

Device* sensor_factory_create(SensorType type);

#endif
  • factory.c
#include "factory.h"

extern Device* create_temp_sensor();
extern Device* create_humidity_sensor();

Device* sensor_factory_create(SensorType type) {
    switch (type) {
        case SENSOR_TEMP:
            return create_temp_sensor();
        case SENSOR_HUMIDITY:
            return create_humidity_sensor();
        default:
            return NULL;
    }
}

使用工廠的主函數(shù)(main.c)

#include <stdio.h>
#include "factory.h"

int main() {
    Device* sensor1 = sensor_factory_create(SENSOR_TEMP);
    Device* sensor2 = sensor_factory_create(SENSOR_HUMIDITY);

    if (sensor1) {
        sensor1->init();
        sensor1->read();
        sensor1->destroy(sensor1);
    }

    if (sensor2) {
        sensor2->init();
        sensor2->read();
        sensor2->destroy(sensor2);
    }

    return 0;
}

三、Linux 應(yīng)用場景舉例

用戶空間

  • 日志模塊封裝:使用工廠返回 file_logger / syslog_logger / udp_logger
  • 插件加載器:通過配置動態(tài)加載插件創(chuàng)建函數(shù)指針并注冊

內(nèi)核空間類比

  • platform_driver 機(jī)制of_device_id 表現(xiàn)類似“注冊表+工廠”
  • probe 函數(shù)中的創(chuàng)建與注冊過程 模擬工廠動態(tài)創(chuàng)建驅(qū)動實例

四、進(jìn)階設(shè)計:注冊表式工廠(更靈活)

typedef struct {
    SensorType type;
    Device* (*create_func)(void);
} SensorRegistryEntry;

static SensorRegistryEntry registry[] = {
    { SENSOR_TEMP, create_temp_sensor },
    { SENSOR_HUMIDITY, create_humidity_sensor },
};

Device* sensor_factory_create(SensorType type) {
    for (int i = 0; i < sizeof(registry)/sizeof(registry[0]); ++i) {
        if (registry[i].type == type) {
            return registry[i].create_func();
        }
    }
    return NULL;
}

這種寫法易于擴(kuò)展,只需新增注冊項。

總結(jié)

  • 工廠模式是創(chuàng)建型設(shè)計模式的典型代表,適用于對象種類較多、結(jié)構(gòu)相似的場景。
  • 在 C 語言中可以通過結(jié)構(gòu)體+函數(shù)指針靈活模擬面向?qū)ο笏枷搿?/li>
  • 工廠模式可以大大降低模塊之間的耦合性,使系統(tǒng)更易于維護(hù)和擴(kuò)展。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語言全部內(nèi)存操作函數(shù)的實現(xiàn)詳細(xì)講解

    C語言全部內(nèi)存操作函數(shù)的實現(xiàn)詳細(xì)講解

    這篇文章主要介紹了C語言全部內(nèi)存操作函數(shù)的實現(xiàn)詳細(xì)講解,作者用圖文代碼實例講解的很清晰,有感興趣的同學(xué)可以研究下
    2021-02-02
  • Qt數(shù)據(jù)庫應(yīng)用之實現(xiàn)通用數(shù)據(jù)庫請求

    Qt數(shù)據(jù)庫應(yīng)用之實現(xiàn)通用數(shù)據(jù)庫請求

    這篇文章主要為大家介紹了Qt中是如何實現(xiàn)通用數(shù)據(jù)庫請求的,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Qt有一定幫助,感興趣的小伙伴可以了解一下
    2022-03-03
  • C++詳細(xì)講解常用math函數(shù)的用法

    C++詳細(xì)講解常用math函數(shù)的用法

    C++提供了很多實用的數(shù)學(xué)函數(shù),如果要使用先添加頭文件,當(dāng)然,加頭文件誰都知道,接下來我們一起詳細(xì)看看各個math函數(shù)的實際使用
    2022-04-04
  • C++ 中String 替換指定字符串的實例詳解

    C++ 中String 替換指定字符串的實例詳解

    這篇文章主要介紹了C++ 中String 替換指定字符串的實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-08-08
  • C++圖論之Bellman-Ford算法和SPFA算法的實現(xiàn)

    C++圖論之Bellman-Ford算法和SPFA算法的實現(xiàn)

    貝爾曼-福特算法(Bellman-Ford)是由理查德·貝爾曼和萊斯特·福特創(chuàng)立的,求解單源最短路徑問題的一種算法。SPFA 算法是 Bellman-Ford算法 的隊列優(yōu)化算法的別稱,通常用于求含負(fù)權(quán)邊的單源最短路徑。本文將詳解兩個算法的實現(xiàn),需要的可以參考一下
    2022-06-06
  • C語言指針入門的簡單實例教程

    C語言指針入門的簡單實例教程

    這篇文章主要給大家介紹了關(guān)于C語言指針入門的簡單實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • C語言中qsort函數(shù)使用及其模擬實現(xiàn)教程

    C語言中qsort函數(shù)使用及其模擬實現(xiàn)教程

    C語言中存在著許多排序函數(shù),如我們熟悉的冒泡函數(shù),還有堆排序、歸并排序等等,這些排序函數(shù)的功能給我們帶來了許多便捷,這篇文章主要介紹了C語言中qsort函數(shù)使用及其模擬實現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2025-08-08
  • C語言實現(xiàn)大數(shù)值金額大寫轉(zhuǎn)換的方法詳解

    C語言實現(xiàn)大數(shù)值金額大寫轉(zhuǎn)換的方法詳解

    這篇文章主要為大家詳細(xì)介紹了如何利用C語言實現(xiàn)大數(shù)值金額大寫轉(zhuǎn)換的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下
    2023-03-03
  • C++使用TinyXML2實現(xiàn)解析和生成XML數(shù)據(jù)

    C++使用TinyXML2實現(xiàn)解析和生成XML數(shù)據(jù)

    TinyXML2是一個輕量級的、開源的C++庫,專門用于解析和生成XML文檔,本文主要為大家介紹了如何使用TinyXML2實現(xiàn)解析和生成XML數(shù)據(jù),需要的可以參考下
    2024-04-04
  • C++的虛析構(gòu)詳解及實例代碼

    C++的虛析構(gòu)詳解及實例代碼

    這篇文章主要介紹了C++的虛析構(gòu)詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-05-05

最新評論

武邑县| 北安市| 策勒县| 阿图什市| 五家渠市| 慈利县| 南安市| 乾安县| 麻栗坡县| 汝阳县| 和林格尔县| 建平县| 城口县| 壶关县| 胶南市| 景洪市| 青冈县| 曲阜市| 张家界市| 玛多县| 永春县| 来凤县| 留坝县| 久治县| 健康| 吕梁市| 桐城市| 平乐县| 县级市| 富蕴县| 镇沅| 牡丹江市| 武汉市| 明溪县| 瓦房店市| 灵璧县| 绍兴市| 茌平县| 龙游县| 北京市| 钟山县|