访问者模式-C#实现

该实例基于WPF实现,直接上代码,下面为三层架构的代码。

一 Model

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 设计模式练习.Model.访问者模式
{
    public class Computer : ComputerPart
    {

        ComputerPart[] parts;

        public Computer()
        {
            parts = new ComputerPart[] { new Mouse(), new Keyboard(), new Monitor() };
        }

        public void accept(ComputerPartVisitor partVisitor)
        {
            foreach (ComputerPart part in parts)
            {
                part.accept(partVisitor);
            }
            partVisitor.Visit(this);
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 设计模式练习.Model.访问者模式
{
    //1,创建访问接口
    public interface ComputerPart
    {
        public void accept(ComputerPartVisitor partVisitor);
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using 设计模式练习.Model.建造者模式;

namespace 设计模式练习.Model.访问者模式
{
    //3,创建实体访问类
    public class ComputerPartDisplayVisitor : ComputerPartVisitor
    {
        //记录访问信息
        public List lists { get; } = new List();

        public void Visit(Computer computer)
        {
            lists.Add(computer.GetType().Name);
        }

        public void Visit(Mouse mouse)
        {
            lists.Add(mouse.GetType().Name);
        }

        public void Visit(Keyboard keyboard)
        {
            lists.Add(keyboard.GetType().Name);
        }

        public void Visit(Monitor monitor)
        {
            lists.Add(monitor.GetType().Name);
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 设计模式练习.Model.访问者模式
{
    //2,创建访问者接口
    public interface ComputerPartVisitor
    {
        public void Visit(Computer computer);
        public void Visit(Mouse mouse);
        public void Visit(Keyboard keyboard);
        public void Visit(Monitor monitor);
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 设计模式练习.Model.访问者模式
{
    public class Keyboard : ComputerPart
    {
        public void accept(ComputerPartVisitor partVisitor)
        {
            partVisitor.Visit(this);
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 设计模式练习.Model.访问者模式
{
    public class Monitor : ComputerPart
    {
        public void accept(ComputerPartVisitor partVisitor)
        {
            partVisitor.Visit(this);
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 设计模式练习.Model.访问者模式
{
    public class Mouse : ComputerPart
    {
        public void accept(ComputerPartVisitor partVisitor)
        {
            partVisitor.Visit(this);
        }
    }
}

二 View


    
        
            
            
        
        
            
                
                
                
                
            
            
            
            
            

        


        

访问者模式-C#实现_第1张图片

三 ViewModel

using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using 设计模式练习.Model.访问者模式;

namespace 设计模式练习.ViewModel.访问者模式
{
    partial class ComputerWindow_ViewModel : ObservableObject
    {
        [ObservableProperty]
        private string res;

        [ObservableProperty]
        private string res2;

        [ObservableProperty]
        private string res3;

        [ObservableProperty]
        private string res4;

        [RelayCommand]
        private void visit()
        {
            ComputerPart computer = new Computer();
            ComputerPartDisplayVisitor visitor = new ComputerPartDisplayVisitor();
            computer.accept(visitor);

            List list = visitor.lists;
            Res = list[0];
            Res2 = list[1];
            Res3 = list[2];
            Res4 = list[3];
        }
    }
}

你可能感兴趣的:(C#,访问者模式,c#,开发语言)