频道栏目
首页 > 程序开发 > 软件开发 > Java > 正文
Java设计模式(21)行为型:访问者模式
2016-12-30 09:36:26         来源:致良知,让良知的心伴你通行。  
收藏   我要投稿

Java设计模式(21)行为型:访问者模式:(一)模式概念:访问者模式表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。访问者模式适用于数据结构相对稳定算法又易变化的系统,若系统数据结构对象易于变化,则不适合使用访问者模式。访问者模式的优点是增加操作很容易,因为增加操作意味着增加新的访问者。

(二)模式结构

1)Visitor 抽象访问者角色:

为该对象结构中具体元素角色声明一个访问操作接口。该操作接口的名字和参数标识了发送访问请求给具体访问者的具体元素角色,这样访问者就可以通过该元素角色的特定接口直接访问它。
2)ConcreteVisitor具体访问者角色:

实现Visitor声明的接口。
3)Element抽象受访元素:

定义一个接受访问操作(accept()),它以一个访问者(Visitor)作为参数。
4)ConcreteElement 具体受访元素:

实现了抽象元素(Element)所定义的接受操作接口。
5)ObjectStructure 结构对象角色:

这是使用访问者模式必备的角色。它具备以下特性:能枚举它的元素;可以提供一个高层接口以允许访问者访问它的元素;如有需要,可以设计成一个复合对象或者一个聚集(如一个列表或无序集合)。

(三)Demo

抽象访问者角色:

 

public interface IVisitor {
	public void accept(Feman feman);

	public void accept(Man man);
}
具体访问角色:
public class Visitor implements IVisitor {
	public void accept(Feman feman) {
		System.out.println(feman.getSex() + ":执行相关操作");
	}

	public void accept(Man man) {
		System.out.println(man.getSex() + ":执行相关操作");
	}
}
(注)Visitor中设置了同样的名称的方法且方法传参为实现同一接口的不同对象,即受访者元素。
抽象受访元素:
public abstract class Person {
	private String sex;

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public void accept(Visitor visitor) {
	};
}
具体受访元素:
public class Man extends Person {
	public Man() {
		this.setSex("男");
	}

	@Override
	public void accept(Visitor visitor) {
		visitor.accept(this);
	}
}
public class Feman extends Person {
	public Feman() {
		this.setSex("女");
	}
	
	@Override
	public void accept(Visitor visitor){
		visitor.accept(this);
	}
}
结构对象角色:
public class ObjectStruture {
	public static List getList() {
		List list = new ArrayList();
		list.add(new Man());
		list.add(new Feman());
		list.add(new Feman());
		return list;
	}
}
执行过程:
Visitor visitor = new Visitor();
List list = ObjectStruture.getList();
for (Person e : list) {
	e.accept(visitor);
}
执行结果:
男:执行相关操作
女:执行相关操作
女:执行相关操作
点击复制链接 与好友分享!回本站首页
上一篇:java启动线程三种方式
下一篇:Java设计模式(22)行为型:中介者模式
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站