⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 client.java

📁 设计模式描述设计模式描述设计模式描述设计模式描述
💻 JAVA
字号:
/*
 * Created on 2005-5-11
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package com.test.pattern.behavir.visitor;

/**
 * @author Administrator
 * 
 * 意图 表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 适用性
 * 一个对象结构包含很多类对象,它们有不同的接口,而你想对这些对象实施一些依赖于其具体类的操作。
 * 需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而你想避免让这些操作“污染”这些对象的类。Vi s i t o r
 * 使得你可以将相关的操作集中起来定义在一个类中。当该对象结构被很多应用共享时,用Vi s i t o r 模式让每个应用仅包含需要用到的操作。
 * 定义对象结构的类很少改变,但经常需要在此结构上定义新的操作。改变对象结构类需要重定义对所有访问者的接口,这可能需要很大的代价。如果对象结构类经常改变,那么可能还是在这些类中定义这些操作较好。
 */
abstract class Visitor {
	abstract public void VisitElementA(ConcreteElementA a);

	abstract public void VisitElementB(ConcreteElementB b);
}

class ConcreteVisitor1 extends Visitor {
	public void VisitElementA(ConcreteElementA a) {

	}

	public void VisitElementB(ConcreteElementB b) {

	}
}

abstract class Element {
	abstract public void Accept(Visitor v);
}

class ConcreteElementA extends Element {
	public Visitor myVisitor;

	public void Accept(Visitor v) {
		myVisitor = v;
	}

	public void OperationA() {

	}

	public void DoSomeWork() {
		// do some work here
		// . . .

		// Get visitor to visit
		myVisitor.VisitElementA(this);

		// do some more work here
		// . . .
	}
}

class ConcreteElementB extends Element {
	public void Accept(Visitor v) {

	}

	public void OperationB() {

	}
}

/// <summary>
/// Summary description for Client.
/// </summary>

public class Client {
	public static void main(String[] args) {
		ConcreteElementA eA = new ConcreteElementA();
		ConcreteElementB eB = new ConcreteElementB();
		ConcreteVisitor1 v1 = new ConcreteVisitor1();

		eA.Accept(v1);
		eA.DoSomeWork();

	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -