美文网首页
{C#}设计模式辨析.访问者

{C#}设计模式辨析.访问者

作者: 码农猫爸 | 来源:发表于2021-08-12 08:03 被阅读0次

背景

  • 访问者可操作多个元素类(数据)中的功能,元素类之间可以无关联。
  • 如访问目的不同,可创建多个访问者。

示例

using static System.Console;

namespace DesignPattern_Visitor
{
    // 访问者接口,可执行所有被访类的功能
    public interface IVisitor
    {
        void PatCat(Cat cat); // 必须传参具体类
        void WalkDog(Dog dog);
    }

    // 具体访问者
    public class Visitor : IVisitor
    {
        private readonly string name;

        public Visitor(string name)
        {
            this.name = name;
        }

        public void PatCat(Cat cat) => cat.Pat(name);
        public void WalkDog(Dog dog) => dog.Walk(name);
    }

    // 被访类接口
    public interface IElement
    {
        void Accept(IVisitor visitor); // 运行时,执行访问动作
    }

    // 具体被访类,多个之间可无关联
    public class Cat : IElement
    {
        public void Accept(IVisitor visitor)
            => visitor.PatCat(this);

        public void Pat(string name)
            => WriteLine($"{name} is patting a cat.");
    }

    public class Dog : IElement
    {
        public void Accept(IVisitor visitor)
            => visitor.WalkDog(this);

        public void Walk(string name)
            => WriteLine($"{name} is walking a dog.");
    }

    class Program
    {
        static void Main(string[] args)
        {
            var visitor = new Visitor("Zhang");
            var cat = new Cat();
            cat.Accept(visitor);

            var dog = new Dog();
            dog.Accept(visitor);

            ReadKey();
        }
    }
}

相关文章

  • {C#}设计模式辨析.访问者

    背景 访问者可操作多个元素类(数据)中的功能,元素类之间可以无关联。 如访问目的不同,可创建多个访问者。 示例

  • 设计模式

    《C#设计模式》 《C#设计模式》-设计模式概述 《C#设计模式》-面向对象设计原则 《C#设计模式》-单例模式 ...

  • [Android]设计模式-访问者模式

    [Android]设计模式-访问者模式 访问者模式 Visitor 【备注】只用于个人收藏

  • {C#}设计模式辨析.命令

    背景 通过命令解耦接收者和调用者。 接收者,处理具体请求。 命令,绑定接收者和请求。 调用者=命令容器,可执行和撤...

  • {C#}设计模式辨析.状态

    背景 前序状态执行后,切换到后续状态 与责任链异同责任链:遍历并下放到具体责任者处理要求状态:在不同状态中轮转处理...

  • {C#}设计模式辨析.策略

    背景 策略作为算法,可自由替换 示例

  • {C#}设计模式辨析.门面

    背景 复杂系统,可切割成多个相互独立的子系统并由子系统组合而成 与桥接的异同桥接的是维度,每个维度可由子类替换门面...

  • {C#}设计模式辨析.组合

    背景 处理枝(叶的集合)和叶结构 示例

  • {C#}设计模式辨析.代理

    背景 在原程序上加壳,ex. 壳=虚拟/保护/远程/日志记录 等 示例

  • {C#}设计模式辨析.原型

    背景 绕过构造器,快速创建已有原型的复制品。 复制品可与原型脱勾,独立修改属性或字段。 示例

网友评论

      本文标题:{C#}设计模式辨析.访问者

      本文链接:https://www.haomeiwen.com/subject/melcbltx.html