当前位置: 首页 > news >正文

汕头专业的开发网站方案郑州建网站哪家好

汕头专业的开发网站方案,郑州建网站哪家好,wordpress摘要seo,wordpress主题改字体C语言设计模式 尽管 C 语言并不直接支持面向对象编程,但通过结构体和函数指针的灵活运用,我们依然可以实现多种经典的设计模式。 1. 工厂模式 1.1 工厂方法的定义与实现 工厂模式通过统一的接口创建对象,客户端无需知道具体的创建逻辑。 代…

C语言设计模式

尽管 C 语言并不直接支持面向对象编程,但通过结构体和函数指针的灵活运用,我们依然可以实现多种经典的设计模式。

1. 工厂模式

1.1 工厂方法的定义与实现

工厂模式通过统一的接口创建对象,客户端无需知道具体的创建逻辑。

代码示例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>// 抽象产品类型定义
typedef struct Product {void (*use)(struct Product*); // 指向具体产品使用方法的函数指针
} Product;// 具体产品A定义
typedef struct {Product base;char* name;
} ProductA;// 产品A的使用方法实现
void useProductA(Product* base) {ProductA* self = (ProductA*)base;printf("Using Product A: %s\n", self->name);
}// 具体产品B定义
typedef struct {Product base;int version;
} ProductB;// 产品B的使用方法实现
void useProductB(Product* base) {ProductB* self = (ProductB*)base;printf("Using Product B: version %d\n", self->version);
}// 工厂方法,根据类型创建不同的产品
Product* createProduct(const char* type) {if (strcmp(type, "A") == 0) {ProductA* product = malloc(sizeof(ProductA));product->base.use = useProductA;product->name = "Example A";return (Product*)product;} else if (strcmp(type, "B") == 0) {ProductB* product = malloc(sizeof(ProductB));product->base.use = useProductB;product->version = 1;return (Product*)product;}return NULL;
}// 测试工厂模式
int main() {Product* p1 = createProduct("A");Product* p2 = createProduct("B");p1->use(p1);p2->use(p2);free(p1);free(p2);return 0;
}
1.2 适用场景
  • 数据库连接:根据需求创建不同类型的数据库连接对象。
  • 图形系统:动态创建圆形、矩形等不同的图形对象。
  • 日志系统:创建不同日志记录方式的对象,如文件日志或控制台日志。

2. 策略模式

2.1 策略模式的实现

策略模式通过函数指针实现不同策略的切换。

代码示例:

#include <stdio.h>
#include <stdlib.h>// 策略类型定义
typedef struct {void (*execute)(void); // 指向策略实现的函数指针
} Strategy;// 策略A实现
void strategyA() {printf("Executing Strategy A\n");
}// 策略B实现
void strategyB() {printf("Executing Strategy B\n");
}// 测试策略模式
int main() {Strategy strategy;// 使用策略Astrategy.execute = strategyA;strategy.execute();// 切换为策略Bstrategy.execute = strategyB;strategy.execute();return 0;
}
2.2 适用场景
  • 排序算法:动态选择快速排序、归并排序等不同算法。
  • 支付系统:支持支付宝、微信支付等多种支付方式切换。
  • 文件压缩:选择不同的压缩算法,如ZIP或RAR。

3. 观察者模式

3.1 观察者模式的实现

观察者模式实现一对多的通知机制。

代码示例:

#include <stdio.h>
#include <stdlib.h>// 观察者接口定义
typedef struct Observer {void (*update)(struct Observer*, const char* message); // 更新方法struct Observer* next; // 链表指针,指向下一个观察者
} Observer;// 具体观察者定义
typedef struct {Observer base;char* name;
} ConcreteObserver;// 具体观察者的更新方法实现
void observerUpdate(Observer* base, const char* message) {ConcreteObserver* self = (ConcreteObserver*)base;printf("%s received: %s\n", self->name, message);
}// 主题(Subject)定义
typedef struct {Observer* observers; // 链表头指针,保存所有观察者
} Subject;// 添加观察者到主题
void addObserver(Subject* subject, Observer* observer) {observer->next = subject->observers;subject->observers = observer;
}// 通知所有观察者
void notifyObservers(Subject* subject, const char* message) {Observer* current = subject->observers;while (current) {current->update(current, message);current = current->next;}
}// 测试观察者模式
int main() {Subject subject = { .observers = NULL };// 创建两个观察者ConcreteObserver o1 = { .base.update = observerUpdate, .name = "Observer 1" };ConcreteObserver o2 = { .base.update = observerUpdate, .name = "Observer 2" };// 将观察者添加到主题中addObserver(&subject, (Observer*)&o1);addObserver(&subject, (Observer*)&o2);// 通知所有观察者notifyObservers(&subject, "Event happened");return 0;
}
3.2 适用场景
  • GUI事件:按钮点击后通知多个事件监听器。
  • 实时数据监控:股票价格变动后通知多个用户。
  • 发布-订阅系统:如聊天室中用户订阅消息后实时接收。
http://www.yayakq.cn/news/753043/

相关文章:

  • 阿里巴巴做国际网站要多少钱手机网站怎么解析
  • 泰和网站建设房地产网站怎么做
  • 腾讯大浙网 网站开发温州专业网站托管
  • 西宁 专业网站建设外贸哪些免费网站开发客户
  • 网站建设应该学什么设计加盟
  • 网站10月份可以做哪些有意思的专题乐清网站只做
  • 网站要能被搜到需要做推广嘛珠海制作网站
  • 如何建做校园购物网站做相似网站
  • 哪个网站可以代做软件网页设计师的能力
  • 做网站推广可行吗xampp上传Wordpress
  • 青岛网站排名建站公司排名
  • 微信h5网站模板下载手机网站建设网站报价
  • 会员发布网站建设温州高端模板建站
  • 通城做网站的注册网站模板
  • 做网站很挣多少钱广东粤数网络建设有限公司
  • 公司做两个网站类似稿定设计的软件有哪些
  • 深圳旅游公司网站网站建设如何存数据
  • 免费企业建站开源系统WordPress简约主题博客
  • 如何注册一个网站域名备案h5自己制作模板
  • 寻找电商网站建设wordpress可以建什么站
  • vue做门户网站用什么ui网站建设集约化
  • 电子商务网站系统规划报告烟台有哪些网站建站推广公司
  • 易思企业网站管理中小型网站建设咨询
  • 做网站三网多少钱广州教育网站设计公司
  • 网站升级建设中对酒店网站建设的意见
  • 做宴会有哪些素材网站Wordpress自己定义主页界面
  • 做游戏攻略网站赚钱吗网站怎么做房源
  • 查一下红之易道学做的什么网站网页源代码翻译器
  • 企业产品展示网站模板辽宁注册公司网站
  • 防伪网站建设怎么在新建网站上做分享代码