设计模式 行为模式 中介者模式 c语言 版本实现

设计模式看的有些不懂,也不知理解对不对,千里之行,始于键盘下,于是写个代码感受一下。

网上有些中介者的例子,有个举得是公司内各部门间的例子,感觉阐释的挺好,在我理解看来,倘若有10种对象,他们都有一个变量叫‘库存’,于是可能每个对象都要维护这个库存变量,而且这个变量的改变会影响其他对象,那么可不可以把这个变量拿出来单独放在一个地方,也许此时可以考录把它放在中介者里,感觉有点像全局变量,现实中这个中介者或许有些像服务中心,或者有人说是中介,这个中介者不但能放变量,还可以提供服务。

写了个就餐的小程序,差强人意吧。

里面包含顾客,厨师,和服务员,服务员是顾客和厨师的中介者,顾客一来就狮子大开口说要吃一吨鱼,而厨师做不了这么多鱼,所以由服务员来调停。


#include <stdio.h>
#include <stdlib.h>
struct Customer {
    struct Waiter* waiter;
    int ( *request) (struct Customer* customer, int fish);
};
struct Cooker {
    struct Waiter* waiter;
    void ( *cook)(struct Cooker* cooker, int fish);
};
struct Waiter {                                             //中介者waiter负责提供数据供双方访问,类似于全局变量
    int fish;

    struct Customer* customer;                              //当customer指向waiter后,就可以通过访问waiter中的结构体来访问其他对象
    struct Cooker* cooker;
    int ( *wrequest)(struct Customer* customer, int fish);  //customer
};
void cook (struct Cooker* cooker, int fish) {
    cooker->waiter->fish = fish;
}
int request (struct Customer* customer, int fish) {
    return customer->waiter->wrequest(customer, fish);      //调用终结者中的函数 ,使维护集中在中介者中
}
int wrequest (struct Customer* customer, int fish) {        //很多资源和函数都集中在中介者中,
     if (fish > customer->waiter->fish) {
        printf ("抱歉,厨师反馈没有 %d 那么多鱼了,重新点菜吧。\n", fish);
        return -1;
    }
    else {
        printf ("点菜成功,厨房还有很多鱼,足够你们吃了\n");
        return 0;
    }
}
int fish(void) {
        return rand()%50 +40;
}
int main (void) {
    srand((unsigned) time(0));
    struct Customer customer;
    struct Cooker cooker;
    struct Waiter waiter;

    waiter.wrequest = wrequest;

    cooker.waiter = &waiter;
    customer.waiter = &waiter;
    cooker.cook = cook;
    customer.request = request;
    cooker.cook (&cooker, 50);                            //厨师今天只能做50条鱼

    while (customer.request (&customer, fish()));         //消费者跟服务员waiter说要个N条大鱼
}


int request (struct Customer* customer, int fish) {
    return customer->waiter->wrequest(customer, fish);      //调用终结者中的函数 ,使维护集中在中介者中
}

这是消费者的请求函数,说是要吃多少鱼,请求时调用中介者,真正的函数实现是在中介这种,于是核心的数据和方法会集中到中介者中,也许就把分散在不同类中的东西集中到了一起,从维护多个类或对象,到把重点放在中介者上也许就简单了吧。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豆腐白菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值