领动做的企业网站怎么样,域名注册好了,施工企业的描述,获取网站js访问者模式通过将对元素的操作与元素本身分离#xff0c;使得可以在不修改元素类的情况下定义新的操作。
#include iostream
#include vector
#include algorithm// 前向声明
class ConcreteElementA;
class ConcreteElementB;// 访问者接口
class V…访问者模式通过将对元素的操作与元素本身分离使得可以在不修改元素类的情况下定义新的操作。
#include iostream
#include vector
#include algorithm// 前向声明
class ConcreteElementA;
class ConcreteElementB;// 访问者接口
class Visitor
{
public:virtual void visit(ConcreteElementA *element) 0;virtual void visit(ConcreteElementB *element) 0;
};// 元素接口
class Element
{
public:virtual void accept(Visitor *visitor) 0;
};// 具体元素A
class ConcreteElementA : public Element
{
public:void accept(Visitor *visitor) override{visitor-visit(this);}void operationA(){std::cout ConcreteElementA operationA() std::endl;}
};// 具体元素B
class ConcreteElementB : public Element
{
public:void accept(Visitor *visitor) override{visitor-visit(this);}void operationB(){std::cout ConcreteElementB operationB() std::endl;}
};// 具体访问者
class ConcreteVisitor : public Visitor
{
public:void visit(ConcreteElementA *element) override{std::cout ConcreteVisitor visit ConcreteElementA std::endl;element-operationA();}void visit(ConcreteElementB *element) override{std::cout ConcreteVisitor visit ConcreteElementB std::endl;element-operationB();}
};// 对象结构类
class ObjectStructure
{
private:std::vectorElement * elements;public:void addElement(Element *element){elements.push_back(element);}void removeElement(Element *element){auto it std::find(elements.begin(), elements.end(), element);if (it ! elements.end()){elements.erase(it);}}void accept(Visitor *visitor){for (Element *element : elements){element-accept(visitor);}}
};int main()
{ObjectStructure objectStructure;ConcreteElementA elementA;ConcreteElementB elementB;objectStructure.addElement(elementA);objectStructure.addElement(elementB);ConcreteVisitor visitor;objectStructure.accept(visitor);return 0;
}运行结果
ConcreteVisitor visit ConcreteElementA
ConcreteElementA operationA()
ConcreteVisitor visit ConcreteElementB
ConcreteElementB operationB()在上述代码中Visitor是访问者接口定义了访问具体元素的方法。Element是元素接口定义了接受访问者访问的方法。ConcreteElementA和ConcreteElementB是具体元素类实现了元素接口。ConcreteVisitor是具体访问者类实现了访问者接口。ObjectStructure是对象结构类用于管理元素的集合并提供接受访问者访问的方法。在main函数中我们创建了具体元素A和B的实例并将它们添加到对象结构中。然后创建了具体访问者的实例并调用对象结构的accept方法将访问者应用于所有元素。输出结果会显示访问者对不同元素的访问和操作。