0
복합 클래스에 대한 사용자 정의 반복기를 구현하고 클라이언트가 복합 구조를 트래버스하는 방법에 따라 반복기 구현에서 다른 전략을 사용하려고합니다.Java - 전략을 사용하여 반복자를 구현하십시오.
public class MyComposite implements Iterable<MyComponent> {
ArrayList<MyComponent> childComponents;
//MyComposite methods
@Override
public Iterator<MyComponent> iterator() {
return new MyIterator(this);
}
}
I는 반복자 구조의 일부로서 MyIteratorStrategy
오브젝트를 전달하지만 Iterable
인터페이스는 iterator
있어서 지나가는 객체를 허가하지 않는 싶다. 여기
public class SomeClient {
private void traverseComposite() {
MyComposite myComposite = new MyComposite();
MyIteratorStrategy fooStrategy = new MyIteratorStrategy("foo");
MyIteratorStrategy barStrategy = new MyIteratorStrategy("bar");
MyIterator fooIterator = myComposite.iterator(fooStrategy);
MyIterator barIterator = myComposite.iterator(barStrategy);
}
}
내가 반복자의 구현 전략을 활용하고있어 방법 : 난 그렇게 아마도 내가 너무 일반적되고있어, 디자인 패턴을 활용하는 방법을 배울려고
public class MyIterator implements Iterator<MyComponent> {
MyComponent component;
MyIteratorStrategy strategy;
public MyIterator(MyComponent component, MyIteratorStrategy strategy) {
this.component = component;
this.strategy = strategy;
}
@Override
public Component next() {
if(strategy.isDone(component) {
//return some child component
} else {
//return some other child component
}
}
//rest of implementation
}
. 전략을 반복자에 명확하게 주입하려면 어떻게해야합니까?
나는이 질문을 downvoted했다. 우리는 코드가 기대하는 바가 무엇인지, 왜 그렇게 할 것이라고 기대하는지, 실제로 무엇을하는지, 그리고 왜 잘못되었는지를 예상합니다. 제발이 정보를 포함하도록 질문을 편집 한 다음, 내 downvote를 철회하는 것을 고려할 것입니다. 참고 : [최소한의 완전하고 검증 가능한 예제를 만드는 방법] (http://stackoverflow.com/help/mcve) –
@JoeC 제 질문은 명확하게 위에 게시 된 코드의 문제점을 설명합니다. "나는 통과하려고합니다. 'MyIteratorStrategy' 객체를 반복자 생성의 일부로 ** ** 그러나 Iterable 인터페이스는 객체를 반복자 메소드에 전달할 수 없습니다. ** " – mk62
그러면 Iterable >이 구현할 올바른 인터페이스인지 다시 생각해야한다고 생각합니다 . –