The Visitor design pattern represents an operation to be performed on the elements of an object structure. This pattern lets you define a new operation (ObjectStructure) without changing the classes of the elements on which it operates.
简单来说~ 此模式让你能定义一个新的操作来访问对象结构~ 无须动到原本的结构~
学习目标: 访问者模式的概念及实务
学习难度: ☆☆☆
using System;using System.Collections.Generic;namespace ConsoleApp1{ //为对象结构中的每个 ConcreteElement 类声明一个访问操作。 public abstract class Visitor { public abstract void VisitConcreteProductA(ProductA concreteProductA); } //实现访问者声明的每个操作。每个操作都实现了为结构中的相应类或对象定义的算法片段。 public class ConcreteVisitor1 : Visitor { public override void VisitConcreteProductA(ProductA concreteProductA) { Console.WriteLine(concretePlayerA.GetType().Name + " visited by "+this.GetType().Name); } } //定义一个以访问者为参数的 Accept 操作 public abstract class Product { public abstract void Accept(Visitor visitor); } //实现以访问者为参数的 Accept 操作 public class ProductA : Product { public override void Accept(Visitor visitor) { visitor.VisitConcreteProductA(this); } } //可以提供高级界面以允许访问者访问其元素,例如列表或集合 public class ProductManager { List<Product> products = new List<Product>(); public void Attach(Product product) { products.Add(product); } public void Detach(Product product) { products.Remove(product); } public void Accept(Visitor visitor) { foreach (Product product in products) { product.Accept(visitor); } } } public class MainProgram { public static void Main(string[] args) { ProductManager productManager = new ProductManager(); Product productA = new ProductA(); productManager.Attach(productA); ConcreteVisitor1 visitor1 = new ConcreteVisitor1(); productManager.Accept(visitor1); } }}
参考资料:
https://www.dofactory.com/net/visitor-design-pattern