zoukankan      html  css  js  c++  java
  • ●访问者模式

    “男人成功时,背后多半有一个伟大的女人。

    女人成功时,背后大多有一个不成功的男人。

    男人失败时,闷头喝酒,谁也不用劝。

    女人失败时,眼泪汪汪,谁也劝不了。

    男人恋爱时,凡事不懂也要装懂。

    女人恋爱时,遇事懂也装作不懂。”

    根据上面这段话,可变成以下代码:

        /// <summary>
        /// 人员
        /// </summary>
        public abstract class Person
        {
            //得到结论或反应
            public abstract void GetConclusion(Action action);
    
        }
    
        /// <summary>
        /// 男人
        /// </summary>
        public class Man : Person
        {
            public override void GetConclusion(Action action)
            {
                action.ManConclusion(this);
            }
        }
    
        /// <summary>
        /// 女人
        /// </summary>
        public class Woman : Person
        {
            public override void GetConclusion(Action action)
            {
                action.WomanConclusion(this);
            }
        }
        /// <summary>
        /// 表现
        /// </summary>
        public interface Action
        {
            void ManConclusion(Man man);
    
            void WomanConclusion(Woman woman);
        }
    
        /// <summary>
        /// 成功
        /// </summary>
        public class Success : Action
        {
            public  void ManConclusion(Man man)
            {
                Console.WriteLine("{0},{1}时,背后多半有一个伟大的女人。", man.GetType().Name, this.GetType().Name);
            }
    
            public  void WomanConclusion(Woman woman)
            {
                Console.WriteLine("{0},{1}时,背后大多有一个不成功的男人。", woman.GetType().Name, this.GetType().Name);
            }
        }
    
        /// <summary>
        /// 失败
        /// </summary>
        public class Failing : Action
        {
            public  void ManConclusion(Man man)
            {
                Console.WriteLine("{0},{1}时,闷头喝酒,谁也不用劝。", man.GetType().Name, this.GetType().Name);
            }
    
            public  void WomanConclusion(Woman woman)
            {
                Console.WriteLine("{0},{1}时,眼泪汪汪,谁也劝不了。", woman.GetType().Name, this.GetType().Name);
            }
        }
    
        /// <summary>
        /// 恋爱
        /// </summary>
        public class Amativeness : Action
        {
            public  void ManConclusion(Man man)
            {
                Console.WriteLine("{0},{1}时,凡事不懂也要装懂。", man.GetType().Name, this.GetType().Name);
            }
    
            public  void WomanConclusion(Woman woman)
            {
                Console.WriteLine("{0},{1}时,遇事懂也装作不懂。", woman.GetType().Name, this.GetType().Name);
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                Action action = new Success();
                new Man().GetConclusion(action);
                new Woman().GetConclusion(action);
    
                Action action1 = new Failing();
                new Man().GetConclusion(action1);
                new Woman().GetConclusion(action1);
    
                Action action2 = new Amativeness();
                new Man().GetConclusion(action2);
                new Woman().GetConclusion(action2);
            }
        }

    运行结果:

    访问者模式是倾向性拓展设计,在该例子中,表现形式容易拓展,但是人员类型不容易拓展。

    注:《大话设计模式》-访问者模式

  • 相关阅读:
    【Rollo的Python之路】Python 编码与解码
    【Rollo的Python之路】Python 队列 学习笔记 queue
    【Rollo的Python之路】Python 同步条件 学习笔记 Event
    【Rollo的Python之路】Python 条件变量同步 学习笔记 Condition
    【Rollo的Python之路】Python 信号量 学习笔记 Semaphore
    十天冲刺-09
    十天冲刺-08
    十天冲刺-07
    十天冲刺-06
    十天冲刺-05
  • 原文地址:https://www.cnblogs.com/phantom-k/p/7423611.html
Copyright © 2011-2022 走看看