zoukankan      html  css  js  c++  java
  • 设计模式系列

    访问者模式通过使用一个访问者类,是主业务改变执行算法

    介绍

    访问者模式属于行为型模式,通过依据不同的访问者来动态调整访问方式,将数据结构和数据操作进行分离,符合单一职责原则,扩展性较好。

    类图描述

    代码实现

    1、定义组件接口

    public interface IComputerPart
    {
        void Accept(ComputerPartVisitor computerPartVisitor);
    }
    

    2、定义访问者

    public class Keyboard : IComputerPart
    {
        public void Accept(ComputerPartVisitor computerPartVisitor)
        {
            computerPartVisitor.Visit(this);
        }
    }
    
    public class Monitor : IComputerPart
    {
        public void Accept(ComputerPartVisitor computerPartVisitor)
        {
            computerPartVisitor.Visit(this);
        }
    }
    
    public class Mouse : IComputerPart
    {
        public void Accept(ComputerPartVisitor computerPartVisitor)
        {
            computerPartVisitor.Visit(this);
        }
    }
    
    public class Computer : IComputerPart
    {
        readonly IComputerPart[] parts;
        public Computer() => parts = new IComputerPart[] { new Mouse(), new Keyboard(), new Monitor() };
    
        public void Accept(ComputerPartVisitor computerPartVisitor)
        {
            for (int i = 0; i < parts.Length; i++)
            {
                parts[i].Accept(computerPartVisitor);
            }
            computerPartVisitor.Visit(this);
        }
    }
    

    3、定义抽象访问者

    public abstract class ComputerPartVisitor
    {
        public abstract void Visit(Computer computer);
        public abstract void Visit(Mouse mouse);
        public abstract void Visit(Keyboard keyboard);
        public abstract void Visit(Monitor monitor);
    }
    

    4、实现访问者

    public class ComputerPartDisplayVisitor : ComputerPartVisitor
    {
        public override void Visit(Computer computer)
        {
            Console.WriteLine("Displaying computer");
        }
    
        public override void Visit(Mouse mouse)
        {
            Console.WriteLine("Displaying mouse");
        }
    
        public override void Visit(Keyboard keyboard)
        {
            Console.WriteLine("Displaying keyboard");
        }
    
        public override void Visit(Monitor monitor)
        {
            Console.WriteLine("Displaying monitor");
        }
    }
    

    5、上层调用

    class Program
    {
        static void Main(string[] args)
        {
            IComputerPart computer = new Computer();
            computer.Accept(new ComputerPartDisplayVisitor());
            Console.ReadKey();
        }
    }
    

    总结

    访问者模式对访问功能进行统一管理,通过再被访问者的类中加几个对外提供接待访问者的接口,从而改变具体访问者的执行方式。

  • 相关阅读:
    解决跨域之服务器代理http-proxy-middleware模块
    npm、yarn、nrm包管理工具
    nodeJS基础
    gulp自动化构建工具应用
    六种继承方式
    七种去重的方法
    初识模块化
    针对PHP网站攻击的几种方式
    oracle备份恢复(dmp文件)
    nginx.conf中文详解
  • 原文地址:https://www.cnblogs.com/hippieZhou/p/10171064.html
Copyright © 2011-2022 走看看