#include <iostream>
#include <string>
//#include <afx.h>
#include <vector>
#include <list>
using namespace std;
class Man;
class Woman;
class Action
{
public:
string status;
public:
virtual void GetManConclusion(Man *concreteElementA) = 0;
virtual void GetWomanConclusion(Woman *concreteElementA) = 0;
};
class Success:public Action
{
public:
Success()
{
status = "成功";
}
virtual void GetManConclusion(Man *concreteElementA);
virtual void GetWomanConclusion(Woman *concreteElementB);
};
class Fail:public Action
{
public:
Fail()
{
status = "失败";
}
virtual void GetManConclusion(Man *concreteElementA);
virtual void GetWomanConclusion(Woman *concreteElementB);
};
class Person
{
public:
string sex;
public:
virtual void PersonAccept(Action *visitor) = 0;
};
class Man:public Person
{
public:
Man()
{
sex = "男人";
}
virtual void PersonAccept(Action *visitor)
{
visitor->GetManConclusion(this);
}
};
class Woman:public Person
{
public:
Woman()
{
sex = "女人";
}
virtual void PersonAccept(Action *visitor)
{
visitor->GetWomanConclusion(this);
}
};
void Success::GetManConclusion(Man *concreteElementA)
{
cout<<concreteElementA->sex<<this->status<<"背后多半有一个伟大的女人\n";
}
void Success::GetWomanConclusion(Woman *concreteElementB)
{
cout<<concreteElementB->sex<<this->status<<"背后大多有一个不成功的男人\n";
}
void Fail::GetManConclusion(Man *concreteElementA)
{
cout<<concreteElementA->sex<<this->status<<"闷头喝酒,谁也不用劝\n";
}
void Fail::GetWomanConclusion(Woman *concreteElementB)
{
cout<<concreteElementB->sex<<this->status<<"眼泪旺旺,谁也劝不了\n";
}
class ObjectStructure
{
list<Person *>CI;
list<Person *>::iterator i;
public:
void Attach(Person * p)
{
CI.push_back(p);
}
void Detach()
{
CI.pop_back();
}
void Display(Action *a)
{
for (i = CI.begin(); i != CI.end(); ++i)
(*i)->PersonAccept(a);
}
};
int main()
{
ObjectStructure o;
o.Attach(new Man());
o.Attach(new Woman());
Success v1;
o.Display(&v1);
Fail v2;
o.Display(&v2);
cout<<"\nOK\n";
return 1;
}
#include <string>
//#include <afx.h>
#include <vector>
#include <list>
using namespace std;
class Man;
class Woman;
class Action
{
public:
string status;
public:
virtual void GetManConclusion(Man *concreteElementA) = 0;
virtual void GetWomanConclusion(Woman *concreteElementA) = 0;
};
class Success:public Action
{
public:
Success()
{
status = "成功";
}
virtual void GetManConclusion(Man *concreteElementA);
virtual void GetWomanConclusion(Woman *concreteElementB);
};
class Fail:public Action
{
public:
Fail()
{
status = "失败";
}
virtual void GetManConclusion(Man *concreteElementA);
virtual void GetWomanConclusion(Woman *concreteElementB);
};
class Person
{
public:
string sex;
public:
virtual void PersonAccept(Action *visitor) = 0;
};
class Man:public Person
{
public:
Man()
{
sex = "男人";
}
virtual void PersonAccept(Action *visitor)
{
visitor->GetManConclusion(this);
}
};
class Woman:public Person
{
public:
Woman()
{
sex = "女人";
}
virtual void PersonAccept(Action *visitor)
{
visitor->GetWomanConclusion(this);
}
};
void Success::GetManConclusion(Man *concreteElementA)
{
cout<<concreteElementA->sex<<this->status<<"背后多半有一个伟大的女人\n";
}
void Success::GetWomanConclusion(Woman *concreteElementB)
{
cout<<concreteElementB->sex<<this->status<<"背后大多有一个不成功的男人\n";
}
void Fail::GetManConclusion(Man *concreteElementA)
{
cout<<concreteElementA->sex<<this->status<<"闷头喝酒,谁也不用劝\n";
}
void Fail::GetWomanConclusion(Woman *concreteElementB)
{
cout<<concreteElementB->sex<<this->status<<"眼泪旺旺,谁也劝不了\n";
}
class ObjectStructure
{
list<Person *>CI;
list<Person *>::iterator i;
public:
void Attach(Person * p)
{
CI.push_back(p);
}
void Detach()
{
CI.pop_back();
}
void Display(Action *a)
{
for (i = CI.begin(); i != CI.end(); ++i)
(*i)->PersonAccept(a);
}
};
int main()
{
ObjectStructure o;
o.Attach(new Man());
o.Attach(new Woman());
Success v1;
o.Display(&v1);
Fail v2;
o.Display(&v2);
cout<<"\nOK\n";
return 1;
}