访问者模式定义:封装一些作用于某种数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。
优点:
1、符合单一职责原则。
2、优秀的扩展性。
3、灵活性非常高。
缺点:
1、具体元素对访问者公布细节。
2、具体元素变更比较困难。
3、违背了依赖倒置原则。
类图如下:
实现代码如下:
抽象的访问者类:
package com.designpatterns.visitor;
/**
* @author WSYW126
* @version 创建时间:2016年5月7日 上午9:36:08
* 类说明:Alljava
*/
public interface IVisitor {
public void visitor(ConcreteElement1 concreteElement1);
public void visitor(ConcreteElement2 concreteElement2);
}
访问者实现类:
package com.designpatterns.visitor;
/**
* @author WSYW126
* @version 创建时间:2016年5月7日 上午9:48:48
* 类说明:Alljava
*/
public class Visitor implements IVisitor {
@Override
public void visitor(ConcreteElement1 concreteElement1) {
concreteElement1.doSomething();
}
@Override
public void visitor(ConcreteElement2 concreteElement2) {
concreteElement2.doSomething();
}
}
抽象元素类:
package com.designpatterns.visitor;
/**
* @author WSYW126
* @version 创建时间:2016年5月7日 上午9:34:48
* 类说明:Alljava
*/
public abstract class Element {
public abstract void doSomething();
public abstract void accept(IVisitor visitor);
}
具体元素类1:
package com.designpatterns.visitor;
/**
* @author WSYW126
* @version 创建时间:2016年5月7日 上午9:34:48
* 类说明:Alljava
*/
public class ConcreteElement1 extends Element{
@Override
public void doSomething() {
System.out.println("ConcreteElement1 doSomething!");
}
@Override
public void accept(IVisitor visitor) {
visitor.visitor(this);
}
}
具体元素类2:
package com.designpatterns.visitor;
/**
* @author WSYW126
* @version 创建时间:2016年5月7日 上午9:34:48
* 类说明:Alljava
*/
public class ConcreteElement2 extends Element{
@Override
public void doSomething() {
System.out.println("ConcreteElement2 doSomething!");
}
@Override
public void accept(IVisitor visitor) {
visitor.visitor(this);
}
}
这就是访问者模式。
参考资料:
设计模式之禅
备注:
转载请注明出处
http://blog.youkuaiyun.com/wsyw126/article/details/51336362
WSYW126