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

    理解:元素是固定的,作用于元素的状态是可以变化的。就好比一日三餐(元素)是固定的,但是每一餐吃的食物(状态)又是可以不断变化的。

    代码:

    using System.Windows.Forms; 
    namespace DesignMode.Visitor
    {

        //不变的元素
        public class Breakfast
        {
            public Breakfast()
            {
                _name = "早餐";
            }

            private string _name;

            public string Name
            {
                get { return _name; }
                set { _name = value; }
            }

            public void Have(Food food)
            {
                food.HaveBreakfast(this);
            }
        }

        public class Lunch
        {
            public Lunch()
            {
                _name = "午餐";
            }

            private string _name;

            public string Name
            {
                get { return _name; }
                set { _name = value; }
            }

            public void Have(Food food)
            {
                food.HaveLunch(this);
            }
        }

        public class Dinner
        {
            public Dinner()
            {
                _name = "晚餐";
            }

            private string _name;

            public string Name
            {
                get { return _name; }
                set { _name = value; }
            }

            public void Have(Food food)
            {
                food.HaveDinner(this);
            }
        }


        //抽象变化点
        public abstract class Food
        {
            //把每一个不变的元素都要考虑进去
            public abstract void HaveBreakfast(Breakfast breakfast);

            public abstract void HaveLunch(Lunch lunch);

            public abstract void HaveDinner(Dinner dinner);
        }


        public class Noodle : Food
        {
            public override void HaveBreakfast(Breakfast breakfast)
            {
                MessageBox.Show(breakfast.Name + "吃面条");
            }

            public override void HaveLunch(Lunch lunch)
            {
                MessageBox.Show(lunch.Name + "吃面条");
            }

            public override void HaveDinner(Dinner dinner)
            {
                MessageBox.Show(dinner.Name + "吃面条");
            }
        }

        public class Rice : Food
        {
            public override void HaveBreakfast(Breakfast breakfast)
            {
                MessageBox.Show(breakfast.Name + "吃大米");
            }

            public override void HaveLunch(Lunch lunch)
            {
                MessageBox.Show(lunch.Name + "吃大米");
            }

            public override void HaveDinner(Dinner dinner)
            {
                MessageBox.Show(dinner.Name + "吃大米");
            }
        }

        public class KFC : Food
        {
            public override void HaveBreakfast(Breakfast breakfast)
            {
                MessageBox.Show(breakfast.Name + "吃KFC");
            }

            public override void HaveLunch(Lunch lunch)
            {
                MessageBox.Show(lunch.Name + "吃KFC");
            }

            public override void HaveDinner(Dinner dinner)
            {
                MessageBox.Show(dinner.Name + "吃KFC");
            }
        }
    }

    客户端代码:

             

    private void btn_Visitor_Click(object sender, EventArgs e) 

             {
                Noodle noodle = new Noodle();
                Rice rice = new Rice();
                KFC kfc = new KFC();

                Breakfast breakfast = new Breakfast();
                breakfast.Have(noodle);

                Lunch lunch = new Lunch();
                lunch.Have(kfc);
                lunch.Have(rice);

                Dinner dinner = new Dinner();
                dinner.Have(rice);
                dinner.Have(noodle);
            }

  • 相关阅读:
    网页包抓取工具Fiddler工具简单设置
    django-Celery分布式队列简单使用
    django-nginx与uwsgi项目部署
    mysql数据库备份之主从同步配置
    mysql开启二进制日志
    python-django框架中使用七牛云
    python-django框架中使用FastDFS分布式文件系统
    python-django框架中使用docker和elasticsearch配合实现搜索功能
    C#_WPF中创建二维码、识别二维码
    读书笔记:《企业IT架构转型之道-阿里巴巴中台战略思想与架构实战》
  • 原文地址:https://www.cnblogs.com/kavilee/p/2375441.html
Copyright © 2011-2022 走看看