当前位置: 七九推 > IT编程>软件设计>设计模式 > 设计模式系列 - 访问者模式

设计模式系列 - 访问者模式

2022年06月09日 设计模式 我要评论
访问者模式通过使用一个访问者类,是主业务改变执行算法介绍访问者模式属于行为型模式,通过依据不同的访问者来动态调整访问方式,将数据结构和数据操作进行分离,符合单一职责原则,扩展性较好。类图描述代码实现1

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

介绍

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

类图描述

代码实现

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

总结

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

(0)
打赏 微信扫一扫 微信扫一扫

相关文章:

  • 行为模式之中介者模式

    行为模式之中介者模式

    中介模式(mediator)也称调停者模式,是一种比较简单的模式。定义:用一个中介对象封装一系列对象(同事)的交互,中介者使各对象不需要显示地相互作用,从而使其... [阅读全文]
  • 设计模式学习方法

    首先会看懂umluml类图与类的关系详解虚线箭头指向依赖;实线箭头指向关联;虚线三角指向接口;实线三角指向父类;空心菱形能分离而独立存在,是聚合;实心菱形精密关联不可分,是组合;上…

    2022年06月09日 软件设计
  • 六大设计原则(一)SRP单一职责原则

    单一职责原则srp(single reponsibility principle)bo(business object):业务对象biz(business logic):业务逻辑s…

    2022年06月09日 软件设计
  • 
    PHP设计模式—建造者模式

    PHP设计模式—建造者模式

    定义:建造者模式(builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。结构:builder:抽象建造者类,为创建一个 p... [阅读全文]
  • 创建型模式:抽象工厂

    创建型模式:抽象工厂

    个人博客原文:五大创建型模式之三:抽象工厂。简介姓名 :抽象工厂英文名 :abstract factory pattern价值观 :不管你有多少产品,给我就是了... [阅读全文]
  • 设计模式概述

    最近开始学习设计模式相关的知识,记录一下。设计模式是什么学习一个东西,肯定要先知道这个东西是什么,用来解决什么问题。从网上找了一份设计模式的定义:设计模式(Design Patte…

    2022年06月09日 软件设计

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2022  七九推 保留所有权利. 粤ICP备17035492号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com