码迷,mamicode.com
首页 > 编程语言 > 详细

访问者模式之C++实现

时间:2014-06-27 17:09:36      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   code   color   get   

 

 

#include "stdafx.h"
#include <iostream>
#include <vector>
#include <string>
using namespace std;

class Visitor;

class Element
{
protected:
    string name;
public:
    Element(string name)
    {
        this->name = name;
    }

    string GetName() const
    {
        return this->name;
    }

    virtual void Accept(Visitor *visitor) = 0;
};

class Visitor
{
public:
    virtual void Visit(Element* element) = 0;
};

class Friend : public Visitor
{
public:
    void Visit(Element* element)
    {
        cout << "好友访问" << element->GetName() << endl;
    }
};

class Stranger : public Visitor
{
public:
    void Visit(Element* element)
    {
        cout << "陌生人访问" << element->GetName() << endl;
    }
};

class Zoom : public Element
{
public:
    Zoom(string name) : Element(name) {}
    
    virtual void Accept(Visitor *visitor)
    {
        visitor->Visit(this);
    }
};

class Article
{
private:
    vector<Element*> vec_element;
public:
    void AddElement(Element* element)

    {
        vec_element.push_back(element);
    }

    void RemoveElement(Element* element)
    {
        for (vector<Element*>::iterator it = vec_element.begin(); it != vec_element.end(); )
        {
            if (*it == element)
            {
                vec_element.erase(it);
                break;
            }
            it++;
        }
    }

    void Accept(Visitor *visitor)
    {
        Element *element = NULL;
        for (vector<Element*>::iterator it = vec_element.begin(); it != vec_element.end(); it++)
        {
            element = *it;
            element->Accept(visitor);
        }
    }
};

int _tmain(int argc, _TCHAR* argv[])
{
    Article *pArticles = new Article;
    pArticles->AddElement(new Zoom("文章1"));
    pArticles->AddElement(new Zoom("文章2"));
    pArticles->AddElement(new Zoom("文章3"));

    Visitor *pFriend   = new Friend;
    Visitor *pStranger = new Stranger;

    pArticles->Accept(pFriend);
    pArticles->Accept(pStranger);

    return 0;
}

 

访问者模式之C++实现,布布扣,bubuko.com

访问者模式之C++实现

标签:style   class   blog   code   color   get   

原文地址:http://www.cnblogs.com/jingmoxukong/p/3809993.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!