亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

一、工廠模式簡(jiǎn)介

什么是工廠模式?

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

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

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

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

解決辦法:

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

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

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

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

#ifndef DEVICE_H
#define DEVICE_H

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

#endif

各類型傳感器實(shí)現(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)用場(chǎng)景舉例

用戶空間

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

內(nèi)核空間類比

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

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

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ò)展,只需新增注冊(cè)項(xiàng)。

總結(jié)

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

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

相關(guān)文章

  • Qt實(shí)現(xiàn)屏幕底部冒泡效果

    Qt實(shí)現(xiàn)屏幕底部冒泡效果

    這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)屏幕底部冒泡效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • 使用c++調(diào)用windows打印api進(jìn)行打印的示例代碼

    使用c++調(diào)用windows打印api進(jìn)行打印的示例代碼

    這篇文章主要介紹了使用c++調(diào)用windows打印api進(jìn)行打印的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • C/C++解析文件名和目錄路徑的方法

    C/C++解析文件名和目錄路徑的方法

    #include <libgen.h> 是一個(gè) C/C++ 語(yǔ)言的頭文件,主要用于字符串處理,特別是在處理文件路徑時(shí),它提供了一些函數(shù)來(lái)幫助你解析文件名和目錄路徑,本文就給大家介紹一下C/C++解析文件名和目錄路徑的方法,需要的朋友可以參考下
    2024-10-10
  • C語(yǔ)言楊輝三角兩種實(shí)現(xiàn)方法

    C語(yǔ)言楊輝三角兩種實(shí)現(xiàn)方法

    大家好,本篇文章主要講的是C語(yǔ)言楊輝三角兩種實(shí)現(xiàn)方法,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • C語(yǔ)言單循環(huán)鏈表的表示與實(shí)現(xiàn)實(shí)例詳解

    C語(yǔ)言單循環(huán)鏈表的表示與實(shí)現(xiàn)實(shí)例詳解

    這篇文章主要介紹了C語(yǔ)言單循環(huán)鏈表的表示與實(shí)現(xiàn),對(duì)于學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法的朋友來(lái)說(shuō)很有參考借鑒價(jià)值,需要的朋友可以參考下
    2014-07-07
  • C語(yǔ)言深入探究水仙花數(shù)與變種水仙花數(shù)代碼

    C語(yǔ)言深入探究水仙花數(shù)與變種水仙花數(shù)代碼

    求水仙花數(shù)和變種水仙花數(shù)是非常適合初學(xué)者學(xué)習(xí)的代碼,其中包含的循環(huán)和邏輯方式等知識(shí)點(diǎn)。這既能起到對(duì)以往知識(shí)的復(fù)習(xí),也可以學(xué)習(xí)到一種不同的邏輯思考方式
    2022-05-05
  • C語(yǔ)言小程序 楊輝三角示例代碼

    C語(yǔ)言小程序 楊輝三角示例代碼

    輸入要顯示的楊輝三角的行數(shù),會(huì)打印出金字塔型的楊輝三角,不過(guò)行數(shù)太多的話,效果不太好,可以再調(diào)整一下格式控制
    2013-07-07
  • Opencv實(shí)現(xiàn)圖像灰度線性變換

    Opencv實(shí)現(xiàn)圖像灰度線性變換

    這篇文章主要為大家詳細(xì)介紹了Opencv實(shí)現(xiàn)圖像灰度線性變換,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • C++設(shè)計(jì)模式編程中簡(jiǎn)單工廠與工廠方法模式的實(shí)例對(duì)比

    C++設(shè)計(jì)模式編程中簡(jiǎn)單工廠與工廠方法模式的實(shí)例對(duì)比

    這篇文章主要介紹了C++設(shè)計(jì)模式編程中簡(jiǎn)單工廠與工廠方法模式的實(shí)例對(duì)比,文中最后對(duì)兩種模式的優(yōu)缺點(diǎn)總結(jié)也比較詳細(xì),需要的朋友可以參考下
    2016-03-03
  • C++ 中RTTI的使用方法詳解

    C++ 中RTTI的使用方法詳解

    這篇文章主要介紹了C++ 中RTTI的使用方法詳解的相關(guān)資料,希望通過(guò)本文大家能理解使用RTTI,需要的朋友可以參考下
    2017-09-09

最新評(píng)論