一. 问题
在面向对象系统的分析与设计过程中经常会遇到这样一种情况:对于某一个业务逻辑(算法实现)在不同的对象中有不同的细节实现,但是逻辑(算法)的框架(或通用的应用算法)是相同的。Template提供了这种情况的一个实现框架。
二. 模式
Template 模式是采用继承的方式实现这一点:将逻辑(算法)框架放在抽象基类中,并定义好细节的接口,子类中实现细节。
三. 代码
abstractClass.h
#ifndef ABSTRACTCLASS_H
#define ABSTRACTCLASS_H
#include
#include
typedef struct {
size_t size;
void* (*ctor)(void *_self, va_list *params);
void* (*dtor)(void *_self);
void (*templateMethod)(const void *_self);
char *description;
} AbstractClass;
#endif
concreteClass1.h
#ifndef CONCRETECLASS1_H
#define CONCRETECLASS1_H
#include "abstractClass.h"
typedef struct {
const void *abstractClass;
void (*primitiveOperation1)(const void *_self);
void (*primitiveOperation2)(const void *_self);
int a;
} _ConcreteClass1;
extern const void *ConcreteClass1;
#endif
concreteClass1.c
#include "concreteClass1.h"
#include
#include
#include
#include
#include
static void *concreteClass1Ctor(void *_self, va_list *params) {
_ConcreteClas