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();
        }
    }
    

    总结

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

  • 相关阅读:
    python大战机器学习——聚类和EM算法
    python大战机器学习——数据降维
    机器学习(西瓜书)——绪论
    算法设计与分析-HomeWork
    SocLib的安装
    CSS的IE6、IE7、FF兼容性写法
    CSS content内容生成技术以及应用
    js javascript:void(0) 真正含义
    Google Chrome七大新特性
    CSS中文字体对照表
  • 原文地址:https://www.cnblogs.com/hippieZhou/p/10171064.html
Copyright © 2011-2022 走看看