Administrator
发布于 2024-08-03 / 57 阅读
0
0

访问者模式

问题描述

男人和女人是完全不同的两种人,在对待问题上会有完全不同的态度,如何实现男人和女人各方面的对比。

代码实现

人的抽象类

    public abstract class Person
    {
        public abstract void Accept(Action a);
    }

男人、女人具体实现类

    public class Man : Person
    {
        public override void Accept(Action action)
        {
            action.GetManConclusion(this);
        }
    }

    public class WoMan:Person
    {
        public override void Accept(Action action)
        {
            action.GetWoManConclusion(this);
        }
    }

行为的基础类

    public abstract  class Action
    {
        public abstract void GetManConclusion(Man p);
        public abstract void GetWoManConclusion(WoMan p);
    }

具体行为类

    public class Success : Action
    {
        public override void GetManConclusion(Man p)
        {
            Console.WriteLine($"{p.GetType().Name} {this.GetType().Name} 时,背后多半有一个伟大的女人。");
        }

        public override void GetWoManConclusion(WoMan p)
        {
            Console.WriteLine($"{p.GetType().Name} {this.GetType().Name} 时,背后大多有一个不成功的男人。");
        }
    }

    public class Failed : Action
    {
        public override void GetManConclusion(Man p)
        {
            Console.WriteLine($"{p.GetType().Name} {this.GetType().Name} 时,闷头喝酒,谁也不用劝。");
        }

        public override void GetWoManConclusion(WoMan p)
        {
            Console.WriteLine($"{p.GetType().Name} {this.GetType().Name} 时,眼泪汪汪,谁也劝不了。");
        }
    }

人的数据结构

    public class ObjStruct
    {
        List<Person> peoples = new List<Person>();

        public void Attach(Person person)
        {
            peoples.Add(person);
        }

        public void Detach(Person person)
        {
            peoples.Remove(person);
        }

        public void Display(Action action)
        {
            foreach (var people in peoples)
            {
                people.Accept(action);
            }
        }
    }

Main方法

    internal class Program
    {
        static void Main(string[] args)
        {
            ObjStruct objStruct = new ObjStruct();
            objStruct.Attach(new Man());
            objStruct.Attach(new WoMan());

            Success success = new Success();
            objStruct.Display(success);

            Failed failed = new Failed();
            objStruct.Display(failed);

        }
    }

执行结果

Man Success 时,背后多半有一个伟大的女人。
WoMan Success 时,背后大多有一个不成功的男人。
Man Failed 时,闷头喝酒,谁也不用劝。
WoMan Failed 时,眼泪汪汪,谁也劝不了。

UML图


评论