#include <iostream>
using namespace std;
class Your;
class My
{
private :
Your *your;
public :
My(Your *your)
{
this->your = your;
}
void Do()
{
cout << "***" << endl;
}
void Fun()
{
your->Notify(this);
}
};
class Your
{
private :
My *my;
public :
void Notify(My *t)
{
my = t;
my->Do();
}
};
int main()
{
Your *y = new Your();
My *m = new My(y);
m->Fun();
return 0;
}
2
#include <iostream>
using namespace std;
class Visitor;
class Library
{
private :
Visitor *visitor;
public :
Library(Visitor *visitor)
{
this->visitor = visitor;
}
void Do()
{
cout << "借书" << endl;
}
void Accept()
{
visitor->Visit(this);
}
};
class Visitor
{
public :
void Visit(Library *lib)
{
lib->Do();
}
};
int main()
{
Visitor *v = new Visitor();
Library *lib = new Library(v);
lib->Accept();
return 0;
}
改2
#include <iostream>
using namespace std;
class Visitor;
class Library
{
public :
void Do()
{
cout << "借书" << endl;
}
void Accept(Visitor *v)
{
v->Visit(this);
}
};
class Visitor
{
public :
void Visit(Library *lib)
{
lib->Do();
}
};
int main()
{
Visitor *v = new Visitor();
lib->Accept(v);
return 0;
}
3
#include <iostream>
using namespace std;
class Library
{
public :
virtual void Accept() = 0;
virtual void Do() = 0;
};
class Book : public Library
{
void Accept(Visitor *v)
{
v->Visit(this);
}
void Do()
{
cout << "借Book" << endl;
}
};
class Article : public Library
{
public :
void Accept(Visitor *v)
{
v->Visit(this);
}
void Do()
{
cout << "借Article" << endl;
}
};
class Visitor
{
public :
virtual void Visit(Library *t) = 0;
};
class SumPrintvisitor : public Visitor
{
public :
void Visit(Library *t)
{
t->Do();
}
};
int main()
{
SumPrintvisitor *spv = new SumPrintvisitor();
Library *lib = new Book();
lib->Accept(spv);
return 0;
}
4
#include <iostream>
#include <vector>
using namespace std;
class Library
{
public :
virtual void Accept() = 0;
virtual void Do() = 0;
};
class Book : public Library
{
void Accept(Visitor *v)
{
v->Visit(this);
}
void Do()
{
cout << "借Book" << endl;
}
};
class Article : public Library
{
public :
void Accept(Visitor *v)
{
v->Visit(this);
}
void Do()
{
cout << "借Article" << endl;
}
};
class Visitor
{
public :
virtual void Visit(Library *t) = 0;
};
class SumPrintvisitor : public Visitor
{
public :
void Visit(Library *t)
{
t->Do();
}
};
class Manager
{
private :
vector <Library *> vec;
public :
void Add(Library *t)
{
vec.push_back(t);
}
void Request(Visitor *v)
{
vector<Library *>::iterator it;
for(it = vec.begin();it != vec.end();it++)
{
(*it)->Accept(v);
{
}
};
int main()
{
SumPrintvisitor *pv = new SumPrintvisitor();
Manager *pm = new Manager();
Book *book = new Book();
Article *article = new Article();
pm->Add(book);
pm->Add(article);
pm->Request(pv);
return 0;
}