simple_factory

来源:互联网 发布:东坡软件下载 编辑:程序博客网 时间:2024/06/15 09:33
#include<string.h>typedef struct _operate{int a;int b;int (*getResult)(struct _operate *p);}Operate;typedef struct _add{Operate add;int c;}Add;typedef struct _sub{Operate sub;int c;}Sub;typedef struct _mul{Operate mul;int c;}Mul;typedef struct _div{Operate div;int c;}Div;int f_add(Operate *p){return (p->a + p->b);}int f_sub(Operate *p){return (p->a - p->b);}int f_mul(Operate *p){return (p->a * p->b);}int f_div(Operate *p){return (p->a / p->b);}Operate *simple_factory(int flag){Operate *operate = NULL;switch(flag){case 1:operate = (Operate *)malloc(sizeof(Add));memset(operate,0,sizeof(Add));operate->getResult = f_add;break;case 2:operate = (Operate *)malloc(sizeof(Sub));memset(operate,0,sizeof(Sub));operate->getResult = f_sub;break;case 3:operate = (Operate *)malloc(sizeof(Mul));memset(operate,0,sizeof(Mul));operate->getResult = f_mul;break;case 4:operate = (Operate *)malloc(sizeof(Div));memset(operate,0,sizeof(Div));operate->getResult = f_div;break;}return operate;}

#include<stdio.h>#include<stdlib.h>#include"simpleFactory.c"/*Add *ad = NULL;Operate *op = (Operate *)malloc(sizeof(Add));ad = (Add *)op  //lower to childOperate op = NULL;Add *add = (Add *)malloc(sizeof(Add));op = (Operate *)add;//upper to father*//* 1-->'+' 2-->'-' 3-->'x' 4-->'/' */void main(int args, int argc[]){int ret = 0;Add * add = NULL;Operate *op = simple_factory(1);op->a = 5;op->b = 2;ret = op->getResult(op);printf("ret is %d\n",ret);}


0 0
原创粉丝点击