{
vis->VisitSeed_B(this);
}
};
//对象结构类,为了对比不同种子
class ObjectStructure
{
private:
list
public:
//Add
void Attach(Seed* seed)
{
lseed.push_back(seed);
}
//Delete
void Detach(Seed* seed)
{
lseed.remove(seed);
}
//Show
void Display(Status* status)
{
list
for (it; it != lseed.end(); ++it)
{
(*it)->Accept(status);
}
}
};
//测试代码
int main(int argc,char* argv[])
{
ObjectStructure obj;
//加入要对比的两个种子
obj.Attach(new Seed_A());
obj.Attach(new Seed_B());
//查看各种状态下两个种子的情况
obj.Display(new Rain_Status());
//Sun Satte
obj.Display(new Sun_Status());
return 0;
}
三. 说明
1. 首先有一点要明确,就是两种种子不会轻易改变,也就是只有普通和太空种子两种。换句话说就是,数据结构比较稳定。
2. 可以变的是新增的状态,比如增加一个X光下的生成情况,等等。说白了就是,操作集合可以相对自由的演化。
3. 这种结构的优点是,增加新的操作很容易;缺点是,增加新的数据结构有点困难,因为你要在每一个访问者里都添加相应的操作。
4. 种子生长图相对于访问者模式的结构图有如下关系:
seed(种子)相当于 element(元素),这个是不怎么变的。
status(状态) 相当于 visitor(访问者),这个是可变且易变的。要注意的是,每个访问者都要对所有的元素(element)进行操作。
5. 事实上我们很少用这种模式,因为数据结构(element)不变的情况很少。
作者 lwbeyond