访问者模式
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); } } }