zoukankan      html  css  js  c++  java
  • C# 设计模式(23)访问者模式

    访问者模式

    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);
                }
            }
        }

    结果:

  • 相关阅读:
    HotSpot VM执行引擎的实现
    解释器与JIT编译器
    执行引擎(Execution Engine)基础知识
    堆、栈、方法区的详细图解
    方法区的垃圾回收
    方法区的演进
    方法区的内部结构
    方法区内存配置
    设计模式简记-设计原则之迪米特法则
    设计模式简记-设计原则之DRY原则
  • 原文地址:https://www.cnblogs.com/YourDirection/p/14105511.html
Copyright © 2011-2022 走看看