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

    结果:

  • 相关阅读:
    select下拉框
    句柄的获取和切换
    iframe详解
    鼠标事件&键盘事件
    负载均衡的常用算法
    HashMap为什么存取效率那么高?
    Kafka基本介绍
    深入理解Tomcat
    JMS实战——ActiveMQ实现Pub-Sub
    深入理解Java Web——Servlet
  • 原文地址:https://www.cnblogs.com/YourDirection/p/14105511.html
Copyright © 2011-2022 走看看