Vistor(访问者模式)行为型

访问者模式是一种行为设计模式,允许在不修改元素类的情况下为对象结构添加新操作。本文通过购物车与顾客、收银员的交互为例,详细介绍了访问者模式的结构、实例、优缺点及适用场景,强调了其在对象结构稳定系统中的价值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概述

描述:顾客在超超市购买商品时,如苹果、图书等将放在购物车中,然后到收银员付款。在购物过程中,顾客需要对这些商品访问,以便确保这些质量,之后收银员计算价格时也需访问购物车中的商品。
购物车作为ObjectStructure(对象结构)用于存放各种商品,而顾客和收银员作为访问这些商品的访问者,们需要对商品进行检查和计价。不同类型的商品其访问形式也可能不同,如苹果需要过秤之后再计价,而图书不需要。

定义:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。适用于数据结构稳定的系统,它把数据结构和作用于数据结构上的操作分离开,使得操作集合。

二、结构

在这里插入图片描述

  1. 访问者(Visitor)接口声明了一系列以对象结构的具体元素为参数的访问者方法。如果编程语言支持重载,这些方法的名称可以是相同的,但是其参数一定是不同的。
  2. 具体访问者(Concrete Visitor)会为不同的具体元素类实现相同行为的几个不同版本。
  3. 元素(Element) 接口声明了一个方法来“接收” 访问者。该方法必须有一个参数被声明为访问者接口类型。
  4. 具体元素(Concrete Element)必须实现接收方法。 该方法的目的是根据当前元素类将其调用重定向到相应访问者的方法。请注意,即使元素基类实现了该方法,所有子类都必须对其进行重写并调用访问者对象中的合适方法。
  5. 对象结构(ObjectStructure): 能枚举它的元素。可以提供一个高层的接口以允许该访问者访问它的元素。可以是一个复合或是一个集合,如一个列表或一个无序集合。

三、实例

#include<iostream>
#include<string>
#include<list>
using namespace std;
class Apple;
class Book;

// 抽象访问者作为接口
class Vistor {
   
protected:
	string name_;

public:
	void set_name(string name) {
   
		name_ = name;
	}

	virtual void visit(Apple* apple) = 0;
	virtual 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值