欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-04 14:07:46
...

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);
	}
}

 
 

 

 

相关标签: 访问者模式