访问者模式java代码 访问者模式java代码怎么写

访问者设计模式适合解决哪类问题?有没有JAVA实例说明一下 。访问者模式是一种分离对象数据结构与行为的方法,通过这种分离 , 可以为一个已存在的类(即被访问者)增加新的操作(即访问者)而无须为它们进行修改 。
给你个栗子:
package visitor;
/**
* 访问者接口
*
* @author can
*
*/
public interface Visitor {
public void visit(Subject sub);
}
Visitor拥有一个访问对象的方法 , 是主动方;
package visitor;
/**
* 目标接口
*
* @author can
*
*/
public interface Subject {
public String getSubject();
public void accept(Visitor visitor);
}
Subject拥有一个接受VISitor访问的方法 , 是被动方;并且实现对Visit()的访问 。
以下 是具体的实现:
package visitor;
/**
* 访问者实现类
*
* @author can
*
*/
public class MyVisitor implements Visitor {
@Override
public void visit(Subject sub) {
System.out.println("访问了对象:" + sub.getSubject());
}
}
package visitor;
/**
* 目标实现类
*
* @author can
*
*/
public class MySubj implements Subject {
@Override
public String getSubject() {
return "访问了目标实现类";
}
@Override
public void accept(Visitor visitor) {
//实现对自身的访问
visitor.visit(this);
}
}
怎么用呢:
package visitor;
/**
* 测试类
*
* @author can
*
*/
public class VisitorMain {
public static void main(String[] args) {
Visitor visitor = new MyVisitor();
Subject subject = new MySubj();
subject.accept(visitor);
}
}
什么时候使用呢:
1、一个对象结构包含很多类对象,它们有不同的接口 。你想这些对象实施一些依赖于具体类的操作 。
2、要扩展新功能,添加目前尚未考虑到的方法 。
3、对象结构的类很少改变,但又经常 需要在此结构上定义新的操作时 。改变对象结构类要修改接口,代价高 。
java 23种设计模式设计模式主要分三个类型:创建型、结构型和行为型 。
其中创建型有:
一、Singleton,单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点
二、Abstract Factory,抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类 。
三、Factory Method , 工厂方法:定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到了子类 。
四、Builder,建造模式:将一个复杂对象的构建与他的表示相分离,使得同样的构建过程可以创建不同的表示 。
五、Prototype , 原型模式:用原型实例指定创建对象的种类 , 并且通过拷贝这些原型来创建新的对象 。
行为型有:
六、Iterator , 迭代器模式:提供一个方法顺序访问一个聚合对象的各个元素,而又不需要暴露该对象的内部表示 。
七、Observer,观察者模式:定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知自动更新 。
八、Template Method,模板方法:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,TemplateMethod使得子类可以不改变一个算法的结构即可以重定义该算法得某些特定步骤 。
九、Command , 命令模式:将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,对请求排队和记录请求日志 , 以及支持可撤销的操作 。

推荐阅读