第111回 Visitorパターンについて

公開日:2014-10-31 更新日:2019-05-13

1. 概要

独り言によるプログラミング講座「第111回 Visitorパターンについて」です。
デザインパターンの1つである Visitor パターンについて説明しています。

2. 動画



3. 動画中に書いたソース

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //★独り言によるプログラミング講座

            //■Visitorパターンについて
            //  複数のクラスの処理を一元管理
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //メイン処理
            List<ITest> list = new List<ITest>();
            list.Add(new 丸());
            list.Add(new 三角());
            list.Add(new 四角());

            Visitor visitor = new Visitor();
            foreach (var obj in list) {
                obj.setVisitor(visitor);
            }
        }
    }

    interface IVisitor {
        void 実行する(丸 maru);
        void 実行する(三角 maru);
        void 実行する(四角 maru);
    }

    class Visitor : IVisitor {
        public void 実行する(丸 maru) {
            MessageBox.Show(maru.name);
        }

        public void 実行する(三角 sankaku) {
            MessageBox.Show(sankaku.name);
        }

        public void 実行する(四角 shikaku) {
            MessageBox.Show(shikaku.name);
        }
    }

    interface ITest {
        void setVisitor(IVisitor obj);
    }

    class 丸 : ITest{
        public String name = "丸";
        public void setVisitor(IVisitor obj) {
            obj.実行する(this);
        }
    }

    class 三角 : ITest{
        public String name = "三角";
        public void setVisitor(IVisitor obj) {
            obj.実行する(this);
        }
    }
    
    class 四角 : ITest{
        public String name = "四角";
        public void setVisitor(IVisitor obj) {
            obj.実行する(this);
        }
    }
}