`
jsczxy2
  • 浏览: 1273283 次
  • 性别: Icon_minigender_1
  • 来自: 常州
文章分类
社区版块
存档分类
最新评论

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

阅读更多

首先需要感谢下网上各位同志提供的实例,呵呵,我看来是站在巨人的肩膀上开始学习的呢。。。

 

设计模式之Visitor模式:(访问者模式)

定义:让代码用户能够在不修改现有类层次结构的情况下,定义该类层次结构的操作。

说实话,没看明白意思 - -|||感觉就是加入了访问接口,更方便添加外部应用于现有的结构上。。。

 

看例子吧,网上挖的:

如一个公司里有老板,经理,员工三种角色,每个角色都继续Human这个类,对于Human这个类,我们定义为抽象的,一个一个类介绍吧:

1.基类Human.java(抽像类,方法可以不实现)

package com.xuyi.visitor;

import java.util.ArrayList;
import java.util.List;

public abstract class Human {
	protected int id;

	// 该人物所管理的人员,如果是老板那么那就可管理经理
	protected List<? extends Human> list = new ArrayList<Human>();

	public List<? extends Human> getList() {
		return list;
	}

	public void setList(List<? extends Human> list) {
		this.list = list;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public void accept(Visitor visitor) {

	}
}
 

2.子类有3个:

Boss.java

package com.xuyi.visitor;

public class Boss extends Human {
	
	public Boss(int id){
		this.id = id;
	}
	@Override
	public void accept(Visitor visitor) {
		//访问者访问
		visitor.visit(this);
	}
	public String toString(){
		return new StringBuffer("Manager the id:"+id).toString();
	}
}

 Employee.java

package com.xuyi.visitor;

public class Employee extends Human{
	
	public  Employee(int id){
		this.id = id;
	}
	@Override
	public void accept(Visitor visitor) {
		//访问者访问
		visitor.visit(this);
	}
	
	public String toString(){
		return new StringBuffer("Employee the id:"+id).toString();
	}

}

Manager.java

package com.xuyi.visitor;


public class Manager extends Human {
	
	public Manager(int id){
		this.id = id;
	}
	@Override
	public void accept(Visitor visitor) {
		//访问者访问
		visitor.visit(this);
	}
	public String toString(){
		return new StringBuffer("Manager the id:"+id).toString();
	}
}
 

 

3.访问者接口

interface Visitor

package com.xuyi.visitor;

/**
 * 访问员工接口
 * 
 */
public interface Visitor {

	public void visit(Human human);
	
}

 4.访问者接口实现

FindVisitor.java

package com.xuyi.visitor;

import java.util.List;

public class FindVisitor implements Visitor{
	
	private int soughtId;
	private Human found;
	
	public void visit(Human human) {
		if(found==null&&human.getId()==soughtId){
			found=human;
			return;
		}
		List<? extends Human> list = human.getList();
		for(Human e:list){
			if(found==null)
			e.accept(this);
		}
	}
	public Human find(Human mc,int id){
		found = null;
		soughtId = id;
		mc.accept(this);
		return found;
	}
	
}

 5.测试

Test.java

package com.xuyi.visitor;

import java.util.ArrayList;
import java.util.List;

public class Test {
	public static void main(String[] args) {
		Boss boss = new Boss(1);
		List<Manager> managers = new ArrayList<Manager>();
		for(int i =2;i<10;i++){
			Manager manager = new Manager(i);
			List<Employee> employees = new ArrayList<Employee>();
			int k = i*10;
			for(int j = k;j<k+8;j++){
				employees.add(new Employee(j));
			}
			manager.setList(employees);
			managers.add(manager);
		}
		boss.setList(managers);
		
		FindVisitor fv =new FindVisitor();
		Human human = fv.find(boss, 20);
		System.out.println("find:"+ human);
		
		
	}
}

 关键在于访问接口的定义以及类中加入访问者访问的方法

分享到:
评论

相关推荐

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

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

    设计模式之访问者模式(Visitor)

    访问者模式是一种行为设计模式,它使你可以在不修改对象结构的情况下,为对象添加新的操作。这种模式的核心在于将数据结构与对这些数据的操作解耦,使得增加新的操作变得容易,同时也允许独立地改变元素类和访问者类...

    设计模式系列之visitor

    "设计模式系列之visitor"是一个关于软件设计模式的讨论,特别是关注于“访问者”(Visitor)模式。这个模式是GOF(Gamma, Helm, Johnson, Vlissides)在他们的经典著作《设计模式:可复用面向对象软件的基础》中提出...

    设计模式之访问者模式(Visitor Pattern)

    **访问者模式(Visitor Pattern)**是一种行为设计模式,它提供了一种在不修改对象结构的情况下增加新操作的方法。这种模式的主要思想是将数据结构与算法分离,使得算法可以在不改变对象结构的情况下独立变化。 在...

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

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

    设计模式-访问者模式(Visitor)

    访问者模式(Visitor)是一种行为设计模式,它允许在不修改对象结构的前提下向对象结构中的元素添加新的操作。这种模式的核心思想是分离了算法和对象结构,使得算法可以在不改变对象结构的情况下独立变化。 访问者...

    基于visitor模式和访问者模式的表达式树_求值引擎

    2. **访问者模式**:这是与Visitor模式相关的另一种设计模式,但在这里,我们可能是指在表达式树的节点上应用访问者模式。访问者模式使得可以在不修改节点类的情况下,增加对节点的新功能。在本项目中,可能是通过在...

    C#设计模式之Visitor

    **C#设计模式之Visitor** **一、设计模式概述** 设计模式是软件开发中的经验总结,它提供了解决常见问题的可复用解决方案。在C#编程中,设计模式可以帮助我们编写更灵活、可扩展和易于维护的代码。"Visitor"(访问...

    设计模式之访问者模式

    访问者模式是一种软件设计模式,它在对象结构中定义了一个访问者的接口,使得该访问者可以访问该结构中的每一个元素,同时不影响这些元素自身的行为。这种模式的主要目的是将数据操作和业务逻辑分离,使得数据结构...

    (行为型模式) Visitor 访问者模式

    C#面向对象设计模式 (行为型模式) Visitor 访问者模式 视频讲座下载

    访问者模式VisitorPattern

    访问者模式是一种行为设计模式,它使你能在不修改对象结构的前提下向对象添加新的操作。这种模式常用于处理具有复杂逻辑的对象结构,特别是当你需要对这些对象进行多态操作时。访问者模式将算法与数据结构分离,使得...

    实例讲解iOS应用的设计模式开发中的Visitor访问者模式

    访问者模式(Visitor),表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 紧接着,给出其类结构图。 访问者模式适用于数据结构相对稳定的系统,它把...

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

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

    设计模式 访问者模式

    **访问者模式**是一种行为设计模式,它允许在不修改对象结构的情况下添加新的操作。这种模式主要用于处理具有复杂对象结构的情况,使得我们可以对结构中的每个元素执行特定操作,而无需暴露其内部实现。 访问者模式...

    设计模式之访问者模式Java版本实现

    **访问者模式**是软件设计模式中的一种结构型模式,它允许在不修改对象结构的情况下,在对象上增加新的操作。这种模式将数据结构与数据操作分离,使得代码更易于维护和扩展。 在Java中实现访问者模式,通常包括以下...

    java设计模式之访问者模式

    访问者模式是一种软件设计模式,它允许在不改变对象结构的情况下,在对象的现有结构上增加新的操作。在Java中,这种模式尤其有用,因为它能够帮助我们保持类的封装性,同时提供了一种灵活的方式来扩展对象的功能。...

    设计模式-访问者(Visitor)模式详解和应用.pdf

    ### 设计模式-访问者(Visitor)模式详解和应用 #### 一、访问者模式简介 访问者模式(Visitor Pattern)是一种行为型设计模式,它允许我们向一组已存在的类添加新的行为,而无需修改这些类。这种模式的核心思想是在...

    访问者模式(Visitor)原理图

    访问者模式(Visitor Pattern)是GoF提出的23种设计模式中的一种,属于行为模式。它表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。从定义可以看出,...

Global site tag (gtag.js) - Google Analytics