在单片机编程中充分使用抽象工厂模式,确保对象创建的限制,多使用抽象接口避免多变具体实现类
背景
在软件架构设计上追求稳定,就必须多使用稳定的抽象接口,少依赖多变的实现;具体编码时可以充分使用抽象工厂模式
举例进行详细讲解和说明抽象工厂模式在单片机开发中的应用
抽象工厂模式是一种创建型设计模式,它提供了一种方式,可以将一组相关的对象创建封装到一个工厂类中,使得客户端代码与具体对象的创建过程解耦。在单片机开发中,抽象工厂模式可以用于根据不同的配置或需求创建不同类型的硬件驱动对象。
- 抽象定时器驱动接口:
AbstractTimerDriver
结构体定义了定时器驱动的基本操作,包括启动、停止和设置周期。 - 抽象定时器工厂接口:
AbstractTimerFactory
结构体定义了创建定时器驱动对象的抽象方法。 - 具体定时器驱动实现:分别为平台 1 和平台 2 的外部、内部时钟源实现了具体的定时器驱动,每个驱动都实现了
AbstractTimerDriver
接口中的操作。 - 具体定时器工厂实现:为每个具体的定时器驱动实现了对应的工厂,每个工厂都实现了
AbstractTimerFactory
接口中的创建方法。 - 客户端代码:
clientCode
函数接受一个抽象定时器工厂指针,通过调用工厂的创建方法创建定时器驱动对象,并调用驱动的操作方法。 - 示例运行:在
main
函数中,演示了 4 个示例,分别使用不同平台和不同时钟源的定时器工厂创建定时器驱动对象并进行操作。
通过这种方式,我们可以根据不同的硬件平台和时钟源,使用抽象工厂模式创建不同的定时器驱动对象。
#include <stdio.h>
// 定义抽象定时器驱动接口
typedef struct AbstractTimerDriver
{
void (*start)(void);
void (*stop)(void);
void (*setPeriod)(unsigned int period);
} AbstractTimerDriver;
// 定义抽象定时器工厂接口
typedef struct AbstractTimerFactory
{