访问者模式
1.倾斜可扩展性设计
2.消息处理
代码实现:
实体类:
namespace VisitorPattern
{
public abstract class BaseAdult
{
public string Name { get; set; }
public abstract void Quarrel(IVisitor visitor);
}
public class Woman:BaseAdult
{
public override void Quarrel(IVisitor visitor)
{
visitor.QuarrelWoman(this);
}
}
public class Man:BaseAdult
{
public override void Quarrel(IVisitor visitor)
{
visitor.QuarrelMan(this);
}
}
}
访问者:
namespace VisitorPattern.Visitor
{
public interface IVisitor
{
public void QuarrelMan(BaseAdult adult);
public void QuarrelWoman(BaseAdult adult);
}
public class VisitorInLove:IVisitor
{
public void QuarrelMan(BaseAdult adult)
{
Console.WriteLine($"{adult.Name}知错就改.");
}
public void QuarrelWoman(BaseAdult adult)
{
Console.WriteLine($"{adult.Name}必须哄.");
}
}
class VisitorAfterMarriage:IVisitor
{
public void QuarrelMan(BaseAdult adult)
{
Console.WriteLine($"{adult.Name}不说话.");
}
public void QuarrelWoman(BaseAdult adult)
{
Console.WriteLine($"{adult.Name}...");
}
}
}
代码调用:
class Program
{
static void Main(string[] args)
{
List<BaseAdult> adults = new List<BaseAdult>()
{
new Woman()
{
Name = "Girl"
},
new Man()
{
Name = "Boy"
}
};
Console.WriteLine("********谈恋爱吵架*******");
IVisitor visitor1 = new VisitorInLove();
foreach (var adult in adults)
{
adult.Quarrel(visitor1);
}
Console.WriteLine("********婚后吵架*********");
IVisitor visitor2 = new VisitorAfterMarriage();
foreach (var adult in adults)
{
adult.Quarrel(visitor2);
}
}
}
结果:
