`
darezhong
  • 浏览: 9375 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

设计模式学习之访问者模式

阅读更多

1.名词解释:

访问者模式:标识一个作用于某对象结构中的各元素的操作。它可使你在不改变各元素的前提下作用于这些元素的新操作。

 

2.代码示例:

 

访问者抽象类
package DesignPattern.VisitorPattern;

public abstract class Visitor {

	public abstract void VisitConcreateElementA(ConcreateElementA concreateElementA);
	
	public abstract void VisitConcreateElementB(ConcreateElementB concreateElementB); 
}

 

实际访问者类A
package DesignPattern.VisitorPattern;

public class ConcreateVisitorA extends Visitor{

	@Override
	public void VisitConcreateElementA(ConcreateElementA concreateElementA) {
		// TODO Auto-generated method stub
		System.out.println(concreateElementA.getName() + "失败时,闷头喝酒,谁也不用劝。");
		
	}

	@Override
	public void VisitConcreateElementB(ConcreateElementB concreateElementB) {
		// TODO Auto-generated method stub
		System.out.println(concreateElementB.getName() + "失败时,眼泪汪汪,谁也劝不住。");
	}

}

 

实际访问者类B
package DesignPattern.VisitorPattern;

public class ConcreateVisitorB extends Visitor{

	@Override
	public void VisitConcreateElementA(ConcreateElementA concreateElementA) {
		// TODO Auto-generated method stub
		System.out.println(concreateElementA.getName() + "成功时,背后多半有一个伟大的女人。");
	}

	@Override
	public void VisitConcreateElementB(ConcreateElementB concreateElementB) {
		// TODO Auto-generated method stub
		System.out.println(concreateElementB.getName() + "成功时,背后大多有一个不成功的男人。");
	}

}

 

实际访问者类C
package DesignPattern.VisitorPattern;

public class ConcreateVisitorC extends Visitor{

	@Override
	public void VisitConcreateElementA(ConcreateElementA concreateElementA) {
		// TODO Auto-generated method stub
		System.out.println(concreateElementA.getName() + "恋爱时,凡事不懂也要装懂。");
		
	}

	@Override
	public void VisitConcreateElementB(ConcreateElementB concreateElementB) {
		// TODO Auto-generated method stub
		System.out.println(concreateElementB.getName() + "成功时,遇事懂也装作不懂。");
		
	}

}

 

抽象元素类
package DesignPattern.VisitorPattern;

public abstract class Element {

	public abstract void Accept(Visitor visitor);
}

 

实际元素类A
package DesignPattern.VisitorPattern;

public class ConcreateElementA extends Element{
	
	private String name = "";
	
	public ConcreateElementA(String name) {
		this.name = name;
	}

	@Override
	public void Accept(Visitor visitor) {
		// TODO Auto-generated method stub
		visitor.VisitConcreateElementA(this);
	}
	
	public String getName() {
		return this.name;
	}

}

 

实际元素类B
package DesignPattern.VisitorPattern;

public class ConcreateElementB extends Element{

	private String name = "";
	
	public ConcreateElementB(String name) {
		this.name = name;
	}
	
	@Override
	public void Accept(Visitor visitor) {
		// TODO Auto-generated method stub
		visitor.VisitConcreateElementB(this);
	}
	
	public String getName() {
		return this.name;
	}

}

 

主控程序
package DesignPattern.VisitorPattern;

public class Client {
    
	public static void main(String[] args) {
		ObjectStructure objectStructure = new ObjectStructure();
		objectStructure.add(new ConcreateElementA("男人"));
		objectStructure.add(new ConcreateElementB("女人"));
		ConcreateVisitorA v1 = new ConcreateVisitorA();
		ConcreateVisitorB v2 = new ConcreateVisitorB();
		ConcreateVisitorC v3 = new ConcreateVisitorC();
		objectStructure.Accept(v1);
		objectStructure.Accept(v2);
		objectStructure.Accept(v3);
	}
}

 
 

 

 

分享到:
评论

相关推荐

    设计模式C++学习之访问者模式(Visitor)

    访问者模式(Visitor)是一种行为设计模式,它允许在不修改对象结构的前提下向对象结构中的元素添加新的操作。这种模式将算法与数据结构分离,使得算法可以独立于数据结构进行变化,增强了系统的可扩展性。 在C++中...

    设计模式的访问者模式的例子

    访问者模式是一种软件设计模式,它在对象结构中定义了一个访问者的接口,使得该..."设计模式的访问者模式的例子"是理解并掌握这一模式的好材料,对于想要深入学习设计模式的IT从业者而言,这是一个不容忽视的学习资源。

    设计模式之美—学习笔记

    在这个“设计模式之美”的学习笔记中,我们将探讨一些主要的设计模式,以及它们在实际开发中的应用。 首先,我们从创建型模式开始。这类模式主要用于对象的创建,如单例模式(Singleton)、工厂模式(Factory ...

    设计模式学习报告

    ### 设计模式学习报告 #### 一、设计模式概述 设计模式是一种被广泛接受和使用的编程解决方案,旨在解决软件设计中的常见问题。它不仅能够帮助开发者编写出更易于理解和维护的代码,还能够促进代码的复用性。设计...

    设计模式之美——教你写出高质量代码

    3. 行为型模式:如策略模式、模板方法模式、观察者模式、命令模式、迭代器模式、责任链模式、备忘录模式、状态模式、解释器模式和访问者模式。这些模式主要处理对象之间的通信和行为,让代码更易于理解和扩展。 在...

    设计模式学习 ppt

    这个“设计模式学习ppt”资料包显然是一份面向初学者或大学生的教学资源,通过十四个PPT文件深入浅出地讲解了设计模式的各个方面。 首先,我们来看设计模式的基本概念。设计模式是对在特定上下文中反复出现的问题...

    java设计模式学习

    本资料“java设计模式学习”包含了对设计模式的深入理解和实际应用,通过简单实用的例子,帮助开发者掌握如何在Java项目中运用设计模式。 首先,我们要介绍的是工厂模式。工厂模式是一种创建型设计模式,它提供了一...

    24种设计模式以及混合设计模式

    如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、命令模式(Command)、迭代器模式(Iterator)、访问者模式(Visitor)、备忘录模式(Memento)、状态模式(State)、职责链...

    设计模式学习.zip

    本资源"设计模式学习.zip"聚焦于C++编程语言中的设计模式应用,是2017年的一次黑马程序员培训课程的配套代码,旨在帮助学习者通过实际的代码示例来理解和掌握设计模式。 在C++中,设计模式主要分为三大类:创建型...

    C#面向对象设计模式纵横谈(24):(行为型模式) Visitor 访问者模式

    ### C#面向对象设计模式纵横谈(24):(行为型模式) Visitor 访问者模式 #### 概述 在本篇文章中,我们将深入探讨面向对象设计模式中的一个非常重要的模式——**Visitor(访问者)模式**。此模式属于行为型模式的一...

    GOF设计模式中英文+设计模式精解中英文

    GOF(Gang of Four)设计模式,由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位专家在他们的著作《设计模式:可复用面向对象软件的基础》中提出,被誉为设计模式的经典之作。本资源包含了GOF设计...

    设计模式学习资料

    访问者模式表示一个作用于某对象结构中的各元素的操作,它可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 设计模式的学习不仅仅是记住每个模式的名称和定义,更重要的是理解其背后的意图和应用场景。...

    设计模式学习经典篇之菜鸟篇

    本资源“设计模式学习经典篇之菜鸟篇”旨在为初学者提供一个全面而通俗易懂的设计模式学习路径。 设计模式的核心在于重用已验证的解决方案,以提高代码的可读性、可维护性和可扩展性。根据GOF(Gamma, Helm, ...

    新版设计模式手册 - C#设计模式(第二版)

    比如命令模式、解释器模式、迭代器模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。C#的事件和委托系统使得实现如观察者模式变得非常直观。 在C#设计模式(第二版)中,作者可能会...

    C++设计模式代码资源24_Vistor_访问器.zip

    总的来说,`C++设计模式代码资源24_Vistor_访问器.zip`提供了一个学习和实践C++访问者模式的实例,通过`Visitor1.cpp`和`Visitor2.cpp`的代码,我们可以深入理解如何在实际项目中运用这一模式,提高代码的灵活性和可...

    设计模式系列之visitor

    压缩包中的"visitor"文件可能包含对该模式的详细代码示例、讲解文档或者案例分析,供学习者深入理解访问者模式的工作原理和实际应用。通过阅读这些材料,你可以更全面地掌握这一设计模式,以便在未来开发中灵活运用...

    尚硅谷设计模式源码笔记课件.zip

    行为型模式:模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter模式)、状态模式、策略模式、职责链模式(责任链模式) 2) 学习目标:通过学习,学员...

Global site tag (gtag.js) - Google Analytics