欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > asp.net >内容正文

asp.net

设计模式复习-访问者模式

发布时间:2025/6/17 asp.net 26 豆豆
生活随笔 收集整理的这篇文章主要介绍了 设计模式复习-访问者模式 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

VisitorMode.h#pragma once #include<list> #include<string> #include<iostream> using namespace std;/* 设计模式-访问者模式(Visitor) 表示一个作用于某对象机构中各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于 这些元素的新操作。 */class CConcreteElementA; class CConcreteElementB;class CVisitor {//为该对象结构中ConcreteElement的每个类声明一个Visit操作。 public:virtual void VisitConcreteElementA(CConcreteElementA * pConcreteElementA) = 0;virtual void VisitConcreteElementB(CConcreteElementB * pConcreteElementB) = 0; };class ConcreteVisitor1 :public CVisitor {//具体访问者类 public:void VisitConcreteElementA(CConcreteElementA * pConcreteElementA);void VisitConcreteElementB(CConcreteElementB * pConcreteElementB); };class ConcreteVisitor2 :public CVisitor {//具体访问者类 public:void VisitConcreteElementA(CConcreteElementA * pConcreteElementA);void VisitConcreteElementB(CConcreteElementB * pConcreteElementB); };class CElement {//定义一个Accept操作,它以一个访问者为参数 public:virtual void Accept(CVisitor *pVisitor) = 0; };class CConcreteElementA :public CElement { private:string mstrName; public:CConcreteElementA(const string &strName);void Accept(CVisitor *pVisitor);void OperationA() {}//A的单独方法string GetName(); };class CConcreteElementB :public CElement { private:string mstrName; public:CConcreteElementB(const string &strName);void Accept(CVisitor *pVisitor);void OperationB() {}//B的单独方法string GetName(); };class CobjuctStructure {//定义一个高层接口,以允许访问者访问它的元素。 private:list<CElement*>mlElement; public:CobjuctStructure();~CobjuctStructure();void Attach(CElement *pElement);void Eetach(CElement *pElement);void Accept(CVisitor *pVisitor); };VisitorMode.cpp #include "stdafx.h" #include "VisitorMode.h"void ConcreteVisitor1::VisitConcreteElementA(CConcreteElementA * pConcreteElementA) {cout << "1-A:" << pConcreteElementA->GetName() << endl; } void ConcreteVisitor1::VisitConcreteElementB(CConcreteElementB * pConcreteElementB) {cout << "1-B:" << pConcreteElementB->GetName() << endl; }void ConcreteVisitor2::VisitConcreteElementA(CConcreteElementA * pConcreteElementA) {cout << "2-A:" << pConcreteElementA->GetName() << endl; } void ConcreteVisitor2::VisitConcreteElementB(CConcreteElementB * pConcreteElementB) {cout << "2-B:" << pConcreteElementB->GetName() << endl; }CConcreteElementA::CConcreteElementA(const string &strName) {mstrName = strName;} void CConcreteElementA::Accept(CVisitor *pVisitor) {pVisitor->VisitConcreteElementA(this); } string CConcreteElementA::GetName() {return mstrName; }CConcreteElementB::CConcreteElementB(const string &strName) {mstrName = strName;} void CConcreteElementB::Accept(CVisitor *pVisitor) {pVisitor->VisitConcreteElementB(this); } string CConcreteElementB::GetName() {return mstrName; }CobjuctStructure::CobjuctStructure() {mlElement.clear(); } CobjuctStructure::~CobjuctStructure() {for each(CElement* index in mlElement) {delete index;} } void CobjuctStructure::Attach(CElement *pElement) {mlElement.push_back(pElement); } void CobjuctStructure::Eetach(CElement *pElement) {mlElement.remove(pElement); } void CobjuctStructure::Accept(CVisitor *pVisitor) {for each (CElement * index in mlElement) {index->Accept(pVisitor);} }客户端调用#include<string> #include<iostream> #include "VisitorMode.h" using namespace std;int main() {CobjuctStructure *pO = new CobjuctStructure();pO->Attach(new CConcreteElementA("man"));pO->Attach(new CConcreteElementB("woman"));ConcreteVisitor1 *pV1 = new ConcreteVisitor1();ConcreteVisitor2 *pV2 = new ConcreteVisitor2();pO->Accept(pV1);pO->Accept(pV2);delete pO, delete pV1, delete pV2;getchar();return 0; }

总结

以上是生活随笔为你收集整理的设计模式复习-访问者模式的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。