9.泡妞与设计模式(10) 访问者模式

VISITOR 访问者模式

访问者模式:访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构可以保持不变。访问者模式适用于数据结构相对未定的系统,它把数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对自由的演化。访问者模式使得增加新的操作变的很容易,就是增加一个新的访问者类。访问者模式将有关的行为集中到一个访问者对象中,而不是分散到一个个的节点类中。当使用访问者模式时,要将尽可能多的对象浏览逻辑放在访问者类中,而不是放到它的子类中。访问者模式可以跨过几个类的等级结构访问属于不同的等级结构的成员类。

情人节到了,要给每个MM送一束鲜花和一张卡片,可是每个MM送的花都要针对她个人的特点,每张卡片也要根据个人的特点来挑,我一个人哪搞得清楚,还是找花店老板和礼品店老板做一下Visitor,让花店老板根据MM的特点选一束花,让礼品店老板也根据每个人特点选一张卡,这样就轻松多了。

代码示例

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>

//根据女孩喜欢的不同送出相应的礼物
struct girl
{
    char name[100];
    char like[100];
    int age;
    int tall;
};

void run(struct girl *p)
{
    char str[100] = { 0 };
    sprintf(str, "Dear %s,i love you", p->name);
    printf("贺卡:
%s
", str);
    if (strcmp(p->like, "玫瑰花") == 0)
    {
        printf("送出999朵玫瑰花
");
    }
    else if (strcmp(p->like, "满天星") == 0)
    {
        printf("送出999朵满天星
");
    }
}

void main()
{
    struct girl girl1 = { "1","玫瑰花",18,160 };
    struct girl girl2 = { "2","满天星",18,160 };
    run(&girl1);
    run(&girl2);
    system("pause");
}
原文地址:https://www.cnblogs.com/xiaochi/p/8541150.html