52:교체 자 Iterator 모드
5386 단어 iterator
자바 집합(Collection)대상 은 공 통 된 자바 util.collection 인 터 페 이 스 를 실현 하 는 대상 입 니 다.1.2 버 전부터 자바 언어 는 Vector,Array List,Queue,Stack,TreeSet,HashMap,TreeMap 등 여러 가지 집합 을 제공 합 니 다.그런데 왜 집합 하려 면 교체 자가 필요 합 니까?집합 대상 은 반드시 적당 한 방법 을 제공 해 야 한다.클 라 이언 트 가 하나의 선형 순서에 따라 모든 요소 대상 을 옮 겨 다 니 며 하나의 요소 대상 을 추출 하거나 삭제 할 수 있 도록 해 야 한다.집합 을 사용 하 는 시스템 은 반드시 이런 방법 으로 집합 대상 을 조작 하고 집합 을 사용 하 는 시스템 을 심화 시 키 는 과정 에서 두 가지 문제 가 발생 할 수 있다.
(1)교체 논 리 는 변 하지 않 았 지만 하나의 집합 을 다른 집합 으로 바 꿔 야 할 때 서로 다른 집합 에 서로 다른 인터페이스 가 있 기 때문에 클 라 이언 트 코드 를 수정 해 야 한다.
(2)모 이 는 것 은 변 하지 않 지만 교체 하 는 방식 은 바 뀌 어야 한다.예 를 들 어 원래 요 소 를 읽 고 삭제 하 는 것 만 있 었 는데 지금 요 소 를 걸 러 내 려 면 집적 대상 을 수정 하고 기 존의 옮 겨 다 니 는 방법 을 수정 할 수 밖 에 없다.이런 이 유 는 변 하지 않 는 구 조 를 시스템 에서 추상 적 으로 가 변 성분 과 분리 하지 않 았 기 때문이다.그리고 가 변 부분의 각종 실현 을 봉인 한다.교체 서브 모델 은 교체 논 리 를 하나의 독립 된 교체 서브 대상 에 봉 하여 집합 자체 와 분할한다.교체 대상 은 옮 겨 다 니 는 추상 화 이다.서로 다른 집적 대상 은 똑 같은 교체 대상 을 제공 하여 클 라 이언 트 가 모 이 는 바 텀 구 조 를 알 필요 가 없 게 한다.하나의 집적 은 여러 개의 서로 다른 교체 대상 을 제공 하여 논리 적 변 화 를 집적 대상 자체 에 영향 을 주지 않 게 한다.
다시 말 하면'개폐'원칙:개폐 원칙 은 시스템 이 기 존 코드 를 수정 하지 않 은 상태 에서 기능 의 확장 을 할 수 있 도록 요구한다.이 를 실현 하 는 경 로 는 바로 변화 에 대한 포장 이다.
(1)변화 에 대한 패 키 징 측면 에서 볼 때 교체 서브 모델 은 집적 요소 에 접근 하 는 논리 적 패 키 징 을 하고 이 를 집적 대상 의 패 키 징 에 독립 시 켰 다.이 는 저장 논리 와 교체 논리 가 독립 적 으로 변화 하 는 공간 을 제공 하여 시스템 의 재 활용 성 을 증가 시 켰 다.
(2)코드 의 재 구성 측면 에서 볼 때 교체 자 는 클 라 이언 트 와 집적 사이 에 중개 층 을 추가 하여 클 라 이언 트 와 집적 간 의 통신 을 직접적 으로 간접 적 으로 바 꾸 었 다.이렇게 하 는 장점 은 클 라 이언 트 가 집적 에 미 친 영향 과 집적 의 변화 가 클 라 이언 트 에 미 친 영향 을 완충 하 는 것 이다.
교체 서브 모드 는 다음 과 같은 몇 가지 역할 과 관련된다.
(1)추상 적 인 교체 자(Iterator)역할:이 추상 적 인 역할 은 요 소 를 옮 겨 다 니 는 데 필요 한 인 터 페 이 스 를 정의 합 니 다.
(2)구체 적 인 교체 자(Concrete Iterator)역할:이 역할 은 Iterator 인 터 페 이 스 를 실현 하고 교체 과정 에서 커서 위 치 를 유지 합 니 다.
(3)집합(Aggregate)캐릭터:이 추상 적 인 캐릭터 는 교체 자(Iterator)대상 을 만 드 는 인 터 페 이 스 를 제공 합 니 다.
(4)구체 적 인 집합(Concrete Aggregate)역할:교체 자(Iterator)대상 을 만 드 는 인 터 페 이 스 를 실현 하고 적당 한 구체 적 인 교체 자 인 스 턴 스 를 되 돌려 줍 니 다.
(5)클 라 이언 트(Client)역할:집합 과 교체 대상 에 대한 인용 을 가지 고 교체 대상 의 교체 인 터 페 이 스 를 호출 하 며 교체 서브 작업 을 통 해 요 소 를 모 으 는 증가 와 삭제 도 가능 합 니 다.
소스 코드 는 다음 과 같 습 니 다.
package cai.milenfan.basic.test;
/* ,
*/
abstract public class Aggregate {
public Iterator createIterator(){
return null;
}
}
package cai.milenfan.basic.test;
/*
*
*/
public interface Iterator {
void first();
void next();
boolean isDone();
Object currentItem();
}
package cai.milenfan.basic.test;
public class ConcreteAggregate extends Aggregate{
private Object objs[]= {"Monk Tang",
"Monkey", "Pigsy",
"Sandy", "Horse"};
public Iterator createIterator(){
return (Iterator) new ConcreteIterator(this);
}
public Object getElement(int index){
if (index < objs.length)
{
return objs[index];
}
else
{
return null;
}
}
public int size(){
return objs.length;
}
}
package cai.milenfan.basic.test;
public class ConcreteIterator implements Iterator{
private ConcreteAggregate agg;
private int index = 0;
private int size = 0;
public ConcreteIterator(ConcreteAggregate agg){
this.agg = agg;
size = agg.size();
index = 0 ;
}
public void first(){
index = 0 ;
}
public void next(){
if (index < size){
index ;
}
}
public boolean isDone(){
return (index >= size);
}
public Object currentItem(){
return agg.getElement(index);
}
}
package cai.milenfan.basic.test;
public class Client{
private Iterator it;
private Aggregate agg = new ConcreteAggregate();
public void operation(){
it = agg.createIterator();
while( !it.isDone() ){
System.out.println(it.currentItem().toString());
it.next();
}
}
public static void main(String[] args){
Client client = new Client();
client.operation();
}
}
package cai.milenfan.basic.test;
public class Client{
private Iterator it;
private Aggregate agg = new ConcreteAggregate();
public void operation(){
it = agg.createIterator();
while( !it.isDone() ){
System.out.println(it.currentItem().toString());
it.next();
}
}
public static void main(String[] args){
Client client = new Client();
client.operation();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java 집합 Iterator 교체의 실현 방법이것은 각종 용기 안의 모든 대상을 표준화하는 방법류이고 이것은 매우 전형적인 디자인 모델이다.Iterator 모드는 집합 클래스를 훑어보는 데 사용되는 표준 접근 방법입니다.그것은 접근 논리를 서로 다른 유형의 집...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.