设计模式初探 行为模式 观察者模式 c语言 版本实现

来源:互联网 发布:触摸屏软件开发 delphi 编辑:程序博客网 时间:2024/04/24 20:30

上午简单的学习了观察者模式,首先想到的是群邮件和微博加粉丝。于是写了个凤姐与粉丝的小程序。

我对设计模式是初次学习,理解可能并不准确,只能按照自己的理解去用程序模拟设计模式,希望理解的与其真正含义不要相差太远为好。


/**设计模式 行为模式 观察者模式 凤姐与粉丝  *2013年7月28  * */#include <stdio.h>#include <stdlib.h>struct Fans {    struct Fengjie* fengjie;    void ( *update) ();                             //粉丝获得凤姐的新状态,被动获得    void ( *joinfans)(struct Fans fans);            //粉丝有权选择成为凤姐粉丝    void ( *quitfans)();                            //粉丝有权选择退出凤姐粉丝圈};struct Fengjie {    int fansnum;    struct Fans fanslist[100];                     //负责通知的粉丝的数量,最多100个粉丝    void ( *notify) (struct Fengjie* fengjie);     //由凤姐发出更新通知    void ( *addfans)(struct Fengjie* fengjie, struct Fans fans);    //凤姐这边也可以增加删除粉丝 //   void ( *)delfans)();                            //to be done};void fan1update(){                                  //不同粉丝收到新信息后有不同行为    printf ("fan1 got new news! Unbelievable,Fengjie weight %d now!\n",rand()%10 +50);}void fan2update(){                                  //不同粉丝收到新信息后有不同行为    printf ("fan2 got new news! Fengjie's new weight is %d , oh my god.\n",rand()%10 +50);}void joinfans(struct Fans fans) {    fans.fengjie->addfans(fans.fengjie, fans);      //粉丝这边直接调用凤姐的函数来把该粉丝加入粉丝圈}void notify (struct Fengjie* fengjie){    int i;    for (i = 0; i < fengjie->fansnum; i++)        fengjie->fanslist[i].update();}void addfans (struct Fengjie* fengjie, struct Fans fans) {    fengjie->fanslist[fengjie->fansnum] = fans;    fengjie->fansnum++;}int main (void) {    srand((unsigned) time(0));    struct Fengjie fengjie;    fengjie.notify = notify, fengjie.addfans = addfans, fengjie.fansnum = 0;    struct Fans fan1, fan2;    fan1.fengjie = &fengjie, fan1.joinfans = joinfans, fan1.update = fan1update;    fan2.fengjie = &fengjie, fan2.joinfans = joinfans, fan2.update = fan2update;    fan1.joinfans (fan1);    fan2.joinfans (fan2);    fengjie.notify (&fengjie);}

另外可以根据不同的粉丝写相应的update响应,这又让我想到了网上说的控件菜单等对明令的响应。
观察者只要发现目标有什么风吹草动就会采取行动,这时该称为监视者。

原创粉丝点击