当前位置: 首页 > wzjs >正文

毕业设计购物网站开发的意义重庆介绍ppt制作

毕业设计购物网站开发的意义,重庆介绍ppt制作,镇江抖音seo,济南网络优化推广公司哪家好目录 1、访问者模式含义 2、访问者模式的UML图学习 3、访问者模式的应用场景 4、访问者模式的优缺点 5、访问者模式C实现的实例 1、访问者模式含义 访问者模式(Visitor Pattern)是一种行为型设计模式,它允许将一个作用于某对象结构中的各…

目录

1、访问者模式含义

2、访问者模式的UML图学习

3、访问者模式的应用场景

4、访问者模式的优缺点

5、访问者模式C++实现的实例


1、访问者模式含义

        访问者模式(Visitor Pattern)是一种行为型设计模式,它允许将一个作用于某对象结构中的各元素的操作分离出来,封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。

        该模式的核心思想是操作分离,通过定义一个外部访问者类来扩展复杂对象结构的功能,将数据结构与数据操作解耦,使得操作可以独立于对象的类来定义。

2、访问者模式的UML图学习

访问者模式的UML类图通常包含以下角色:

(1)抽象访问者(Visitor):声明了一个或者多个访问操作,形成所有的具体元素角色必须实现的接口。

(2)具体访问者(ConcreteVisitor):实现抽象访问者角色所声明的接口,也就是抽象访问者所声明的各个访问操作。

(3)抽象节点(Element):声明一个接受操作,接受一个访问者对象作为一个参量。

(4)具体节点(ConcreteNode):实现了抽象节点所规定的接受操作。

(5)结构对象(ObjectStructure):可以遍历结构中的所有元素;如果需要,提供一个高层次的接口让访问者对象可以访问每一个元素;如果需要,可以设计成一个复合对象或者一个聚集,如列(List)或集合(Set)。

3、访问者模式的应用场景

(1)数据结构稳定的场景:数据结构(如对象结构)相对稳定,但经常需要对其上的元素执行不同的操作时,访问者模式非常有用。

(2)需要多种不同操作而不希望修改元素类的场景:如果你有多个不同的操作需要应用到同一组元素上,且不希望在元素类中添加这些操作,访问者模式可以提供一种解决方案。

(3)需要跨不同类层次结构进行操作的场景:当需要在多个不相关的类层次结构上执行操作时,访问者模式可以将操作与类层次结构分离。

(4)需要在对象结构中执行复杂计算的场景:访问者模式可以用于在对象结构中执行复杂的计算或逻辑,而不需要修改元素类本身。

4、访问者模式的优缺点

(1)优点:

  • 符合单一职责原则:访问者模式将元素操作封装在访问者类中,使得元素类专注于其核心职责,而不需要关心如何处理不同的操作。
  • 优秀的扩展性:通过添加新的访问者类,可以很容易地扩展对象结构的功能,而不需要修改元素类。
  • 聚合关系:访问者模式使得元素和访问者之间形成了一种聚合关系,从而提高了系统的灵活性和可维护性。
  • 具体元素变更不频繁:如果元素类比较稳定,即不易发生变更,那么访问者模式将非常适用。

(2)缺点

  • 增加具体元素和访问者类的难度:每次在元素结构中增加新的元素类时,都需要修改访问者类,这违反了开闭原则。
  • 破坏封装:访问者模式需要访问元素类的内部数据和方法,这可能会破坏元素的封装性。
  • 具体元素变更困难:如果元素类经常发生变更,那么访问者模式将变得难以维护,因为每次变更都需要修改访问者类。

5、访问者模式C++实现的实例

#include <iostream>
#include <vector>// 元素接口
class Element {
public:virtual void accept(class Visitor* visitor) = 0;virtual ~Element() {}
};// 具体元素A
class ConcreteElementA : public Element {
public:void accept(Visitor* visitor) override {visitor->visitConcreteElementA(this);}void operationA() {std::cout << "ConcreteElementA's operationA" << std::endl;}
};// 具体元素B
class ConcreteElementB : public Element {
public:void accept(Visitor* visitor) override {visitor->visitConcreteElementB(this);}void operationB() {std::cout << "ConcreteElementB's operationB" << std::endl;}
};// 访问者接口
class Visitor {
public:virtual void visitConcreteElementA(ConcreteElementA* element) = 0;virtual void visitConcreteElementB(ConcreteElementB* element) = 0;virtual ~Visitor() {}
};// 具体访问者
class ConcreteVisitor : public Visitor {
public:void visitConcreteElementA(ConcreteElementA* element) override {std::cout << "ConcreteVisitor visiting ConcreteElementA" << std::endl;element->operationA();}void visitConcreteElementB(ConcreteElementB* element) override {std::cout << "ConcreteVisitor visiting ConcreteElementB" << std::endl;element->operationB();}
};// 对象结构
class ObjectStructure {
private:std::vector<Element*> elements;
public:void addElement(Element* element) {elements.push_back(element);}void accept(Visitor* visitor) {for (Element* element : elements) {element->accept(visitor);}}
};int main() {ObjectStructure os;os.addElement(new ConcreteElementA());os.addElement(new ConcreteElementB());ConcreteVisitor visitor;os.accept(&visitor);// 清理内存(在实际应用中,应使用智能指针等机制来管理内存)// 这里为了简单起见,没有包含清理代码return 0;
}

在这个实例中,Element 是元素接口,ConcreteElementA 和 ConcreteElementB 是具体元素类。Visitor 是访问者接口,ConcreteVisitor 是具体访问者类。ObjectStructure 是对象结构,它包含多个元素,并允许访问者访问这些元素。在 main 函数中,我们创建了一个对象结构,添加了一些元素,并使用访问者来访问这些元素。

http://www.dtcms.com/wzjs/789807.html

相关文章:

  • 建网站需什么条件室内设计网站会员哪个值得买
  • .net网站开发实站aspnet网站开发pdf
  • 网站建设用哪个app北京计算机培训机构前十名
  • 怎么做网站充值网站网络优化初学者难吗
  • 广州手机网站开发哪家网站
  • 优秀国外设计网站网站开发相关期刊
  • 专业的模板建站企业网站加速服务
  • wordpress后台左侧菜单显示引擎优化是什么意思
  • 免费建站平台哪个好企业网站模板科技感
  • 合肥网站的优化营销网站建设网络公司
  • 超便宜的网站网站搭建招标方案
  • wordpress 做企业站全国职业生涯规划大赛
  • 建设网站 无法显示图片上海房地产信息网官网
  • 山东阳信建设局网站东莞网站优化关键词排名
  • 企业报刊网站建设情况总结公司名字大全洋气
  • 福州专业建站自己制作动漫的软件
  • 成都网站快速排名提升wordpress信用卡支付
  • 嘉定制作企业网站重庆森林讲的什么内容
  • 会务网站建设家政类网站开发成本
  • 创建软件网站vps做网站教程
  • 网站建设 后台免费生成app
  • 哪里有免费的网站推广wordpress 主题预览插件
  • 微信引流神器手机电影网站怎么做山东省建设备案在哪个网站
  • 比较出名的设计网站重庆小程序开发
  • 不用代码可以做网站设计吗水果网页设计代码
  • 天猫网站建设的目标是什么产品图册设计
  • 木马网站怎么做赣州网站建设哪家便宜
  • 商务网站开发综合实训南宁百度seo排名价格
  • 漯河市万金镇网站建设wordpress 获取文章地址
  • 岳池建设局网站android购物商城源码