免费h5模板网站模板,来必力wordpress,视频网站开发研究背景,呼市城乡建设厅网站访问者模式是一种行为型设计模式#xff0c;它可以在不修改现有代码结构的情况下#xff0c;为复杂的对象结构添加新的操作。该模式将数据结构和数据操作进行分离#xff0c;使得数据结构可以独立于操作进行变化#xff0c;同时也可以在不改变操作的前提下增加新的操作。 在… 访问者模式是一种行为型设计模式它可以在不修改现有代码结构的情况下为复杂的对象结构添加新的操作。该模式将数据结构和数据操作进行分离使得数据结构可以独立于操作进行变化同时也可以在不改变操作的前提下增加新的操作。 在访问者模式中主要有以下几个角色① 访问者Visitor定义了对每个元素对象访问时所要执行的操作可以通过多态实现针对不同元素的不同操作。② 具体访问者ConcreteVisitor实现了访问者定义的接口完成对元素对象的具体操作。③ 元素Element定义了一个 accept 方法用于接受访问者的访问。④ 具体元素ConcreteElement实现了元素定义的接口通常会在 accept 方法中调用访问者的方法。⑤ 对象结构ObjectStructure包含一个元素的集合通常提供一个方法让访问者遍历所有元素。 访问者模式适用于对象结构比较稳定但经常需要在此对象结构上定义新的操作的情况或者有复杂的对象结构需要一些独立的操作的情况。
1、场景设计
实现场景对象结构中定义A、B两个元素访问者对它们进行访问。
2、C实现
Visitor 是抽象访问者类ConcreteVisitor 是具体访问者类Element 是抽象元素类ConcreteElementA 和 ConcreteElementB 是具体元素类。ObjectStructure 是对象结构类包含了一个元素的集合可以接受访问者的访问。在 main 函数中我们创建了一个具体的访问者和一个对象结构然后向对象结构中添加了两个具体元素最后让访问者访问对象结构。
#include iostream
#include vector// 前置声明防止循环引用
class ConcreteElementB;// 抽象访问者类
class Visitor {public:virtual void visit(ConcreteElementB* element) 0;
};// 具体访问者类
class ConcreteVisitor : public Visitor {public:void visit(ConcreteElementB* element) override {std::cout ConcreteVisitor is visiting ConcreteElementB std::endl;}
};// 抽象元素类
class Element {public:virtual void accept(Visitor* visitor) 0;
};// 具体元素类A
class ConcreteElementA : public Element {public:void accept(Visitor* visitor) override {std::cout ConcreteElementA is accepting visitor std::endl;}
};// 具体元素类B
class ConcreteElementB : public Element {public:void accept(Visitor* visitor) override {visitor-visit(this);}
};// 对象结构类
class ObjectStructure {private:std::vectorElement* elements;public:void addElement(Element* element) {elements.push_back(element);}void accept(Visitor* visitor) {for (Element* element : elements) {element-accept(visitor);}}
};int main() {ConcreteVisitor visitor;ObjectStructure objectStructure;ConcreteElementA elementA;ConcreteElementB elementB;objectStructure.addElement(elementA);objectStructure.addElement(elementB);objectStructure.accept(visitor);return 0;
}3、Java实现
Visitor 是抽象访问者类ConcreteVisitor 是具体访问者类Element 是抽象元素类ConcreteElementA 和 ConcreteElementB 是具体元素类。ObjectStructure 是对象结构类包含了一个元素的集合可以接受访问者的访问。在 main 方法中我们创建了一个具体的访问者和一个对象结构向对象结构中添加了两个具体元素并让访问者访问对象结构。
package behavioralpattern.visitor;import java.util.ArrayList;
import java.util.List;// 抽象访问者类
interface Visitor {void visit(ConcreteElementB element);
}// 具体访问者类
class ConcreteVisitor implements Visitor {Overridepublic void visit(ConcreteElementB element) {System.out.println(ConcreteVisitor is visiting ConcreteElementB);}
}// 抽象元素类
interface Element {void accept(Visitor visitor);
}// 具体元素类A
class ConcreteElementA implements Element {Overridepublic void accept(Visitor visitor) {System.out.println(ConcreteElementA is accepting visitor);}
}// 具体元素类B
class ConcreteElementB implements Element {Overridepublic void accept(Visitor visitor) {visitor.visit(this);}
}// 对象结构类
class ObjectStructure {private ListElement elements new ArrayList();public void addElement(Element element) {elements.add(element);}public void accept(Visitor visitor) {for (Element element : elements) {element.accept(visitor);}}
}public class VisitorDemo {public static void main(String[] args) {ConcreteVisitor visitor new ConcreteVisitor();ObjectStructure objectStructure new ObjectStructure();ConcreteElementA elementA new ConcreteElementA();ConcreteElementB elementB new ConcreteElementB();objectStructure.addElement(elementA);objectStructure.addElement(elementB);objectStructure.accept(visitor);}
}