天天看點

設計模式之 Visitor

[code]

package designpattern;

public interface Visitable

{

public void accept(Visitor visitor);

}

package designpattern;

public class StringElement implements Visitable

{

private String value;

public StringElement(String string)

{

value = string;

}

public String getValue()

{

return value;

}

//定義accept的具體内容 這裡是很簡單的一句調用

public void accept(Visitor visitor)

{

visitor.visitString(this);

}

}

package designpattern;

public class FloatElement implements Visitable

{

public FloatElement(float f)

{

}

private Float value;

public FloatElement(Float value)

{

this.value = value;

}

public Float getValue()

{

return value;

}

//定義accept的具體内容 這裡是很簡單的一句調用

public void accept(Visitor visitor)

{

visitor.visitFloat(this);

}

}

package designpattern;

import java.util.*;

public interface Visitor

{

public void visitString(StringElement stringE);

public void visitFloat(FloatElement floatE);

public void visitCollection(Collection collection);

}

package designpattern;

import java.util.*;

public class ConcreteVisitor implements Visitor

{

public static void main(String[] args)

{

List list = new ArrayList();

list.add(new StringElement("xuxiaolei"));

list.add(new FloatElement(100f));

ConcreteVisitor vistor = new ConcreteVisitor();

vistor.visitCollection(list);

}

public void visitString(StringElement stringE)

{

System.out.println(stringE.getValue());

}

public void visitFloat(FloatElement floatE)

{

System.out.println(floatE.getValue());

}

public void visitCollection(Collection collection)

{

Iterator iterator = collection.iterator();

while (iterator.hasNext())

{

Object o = iterator.next();

if (o instanceof Visitable)

{

((Visitable)o).accept(this);

}

}

}

}

[/code]

繼續閱讀