using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _022访问者模式
{
public interface Element
{
void Accept(IVisit visit);
void Print();
}
public interface IVisit
{
void Visit(ElementA e);
void Visit(ElementB e);
}
public class ElementA : Element
{
public void Accept(IVisit visit)
{
visit.Visit(this);
}
public void Print()
{
Console.WriteLine("这是对象a");
}
}
public class ElementB : Element
{
public void Accept(IVisit visit)
{
visit.Visit(this);
}
public void Print()
{
Console.WriteLine("这是对象b");
}
}
public class Visitor : IVisit
{
public void Visit(ElementB e)
{
e.Print();
}
public void Visit(ElementA e)
{
e.Print();
}
}
public class Manager
{
public List<Element> elements = new List<Element>();
public void createElement()
{
for (int i = 0; i < 10; i++)
{
if (i % 2 == 0)
{
elements.Add(new ElementA());
}
else
{
elements.Add(new ElementB());
}
}
}
}
internal class Program
{
private static void Main(string[] args)
{
Manager manager = new Manager();
manager.createElement();
manager.elements.ForEach(p => p.Accept(new Visitor()));
/*
* 访问者模式
*
* 外部提供一个用于访问的对象
*
* 访问对象根据目标对象进行不同的逻辑
*
* 进而实现解耦
*
* 访问者模式下灵活性很大
*
* 可以实例化不同的访问者从而进行不同的逻辑,对象只需要实现不同访问对象下的逻辑
*
*/
Console.ReadKey();
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _022访问者模式
{
public interface Element
{
void Accept(IVisit visit);
void Print();
}
public interface IVisit
{
void Visit(ElementA e);
void Visit(ElementB e);
}
public class ElementA : Element
{
public void Accept(IVisit visit)
{
visit.Visit(this);
}
public void Print()
{
Console.WriteLine("这是对象a");
}
}
public class ElementB : Element
{
public void Accept(IVisit visit)
{
visit.Visit(this);
}
public void Print()
{
Console.WriteLine("这是对象b");
}
}
public class Visitor : IVisit
{
public void Visit(ElementB e)
{
e.Print();
}
public void Visit(ElementA e)
{
e.Print();
}
}
public class Manager
{
public List<Element> elements = new List<Element>();
public void createElement()
{
for (int i = 0; i < 10; i++)
{
if (i % 2 == 0)
{
elements.Add(new ElementA());
}
else
{
elements.Add(new ElementB());
}
}
}
}
internal class Program
{
private static void Main(string[] args)
{
Manager manager = new Manager();
manager.createElement();
manager.elements.ForEach(p => p.Accept(new Visitor()));
/*
* 访问者模式
*
* 外部提供一个用于访问的对象
*
* 访问对象根据目标对象进行不同的逻辑
*
* 进而实现解耦
*
* 访问者模式下灵活性很大
*
* 可以实例化不同的访问者从而进行不同的逻辑,对象只需要实现不同访问对象下的逻辑
*
*/
Console.ReadKey();
}
}
}