博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式系列 - 访问者模式
阅读量:4676 次
发布时间:2019-06-09

本文共 2118 字,大约阅读时间需要 7 分钟。

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

介绍

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

类图描述

749711-20181224212413200-1001170291.png

代码实现

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

总结

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

转载于:https://www.cnblogs.com/hippieZhou/p/10171064.html

你可能感兴趣的文章
常用dos命令
查看>>
Redis学习第四课:Redis List类型及操作
查看>>
满血复活前的记录(持续更新ing)
查看>>
vs2008使用过AnkhSVN后不能绑定到vss的问题解决
查看>>
在vue中使用sass
查看>>
IPv4组播通信原理
查看>>
Sql Server 新的日期类型
查看>>
“我爱淘”冲刺阶段Scrum站立会议8
查看>>
js获取元素class的几种方法
查看>>
delphi 枚举类型与字符串的转换
查看>>
UVA-10689 Yet another Number Sequence (矩阵二分幂模板)
查看>>
element自定义表单验证
查看>>
Mysql 存储引擎的区别和比较
查看>>
vue管理平台的动态路由(后台传递路由,前端拿到并生成侧边栏)
查看>>
HDU 5412 CRB and Queries 动态整体二分
查看>>
TJU1044
查看>>
shell 查看系统信息
查看>>
Questions
查看>>
我和我的博客
查看>>
使用window.navigator.userAgent属性判断浏览器类型及版本
查看>>