디자인 모드 시리즈의 10 교체기 모드
이런 수요가 있다.한 그룹은 베이징과 상하이에 각각 자회사가 하나 있는데 각 회사 내부에 자신의 부서가 있고 스스로 인쇄 부서의 방법을 제공했다.하위 회사 중 하나는 부서 목록을 배열로 저장하고, 다른 하나는 ArrayList로 저장합니다.현재 모든 부서를 인쇄해야 합니다.
1. 원시적 실현
//
public class Dept {
private String name;
public Dept(String name){
this.name= name;
}
public String getName(){
return this.name;
}
}
//
public class BJBranch {
ArrayList depts;
public BJBranch(){
depts = new ArrayList();
//
depts.add(new Dept(" - "));
depts.add(new Dept(" - "));
depts.add(new Dept(" - "));
}
public ArrayList getDepts(){
return depts;
}
}
//
public class SHBranch {
Dept[] depts;
public SHBranch(){
depts = new Dept[3];
//
depts[0] = new Dept(" - ");
depts[1] = new Dept(" - ");
depts[2] = new Dept(" - ");
}
public Dept[] getDepts(){
return depts;
}
}
public class TestOld {
public static void main(String[] args) {
// TODO Auto-generated method stub
BJBranch BJ = new BJBranch();
ArrayList BJDepts = BJ.getDepts();
SHBranch SH = new SHBranch();
Dept[] SHDepts = SH.getDepts();
//
/** , **/
for(int i=0;i
위의 코드에서 알 수 있듯이 두 자회사의 실현 방식이 다르기 때문에 순환이 반복되고 대응하는 방식을 사용할 수 있어 상당히 큰 불편을 초래한다.
2. 교체기 모드를 사용하여 문제를 해결한다.
//
public interface Iterator {
boolean hasNext();
Object next();
}
//
public class BJBranchIterator implements Iterator{
ArrayList depts;
int position = 0;
public BJBranchIterator(ArrayList depts){
this.depts = depts;
}
@Override
public boolean hasNext() {
if(position>=depts.size() || depts.get(position)==null){
return false;
}else{
return true;
}
}
@Override
public Object next() {
Dept dept = depts.get(position);
position = position + 1;
return dept;
}
}
//
public class BJBranch {
ArrayList depts;
public BJBranch(){
depts = new ArrayList();
//
depts.add(new Dept(" - "));
depts.add(new Dept(" - "));
depts.add(new Dept(" - "));
}
/*public ArrayList getDepts(){
return depts;
}*/
// Iterator , ArrayList
public Iterator createrIterator(){
return new BJBranchIterator(depts);
}
}
//
public class SHBranchIterator implements Iterator{
Dept[] depts;
int position = 0;
public SHBranchIterator(Dept[] depts){
this.depts = depts;
}
@Override
public boolean hasNext() {
if(position>=depts.length|| depts[position]==null){
return false;
}else{
return true;
}
}
@Override
public Object next() {
Dept dept = depts[position];
position = position + 1;
return dept;
}
}
//
public class SHBranch {
Dept[] depts;
public SHBranch(){
depts = new Dept[3];
//
depts[0] = new Dept(" - ");
depts[1] = new Dept(" - ");
depts[2] = new Dept(" - ");
}
/*public Dept[] getDepts(){
return depts;
}*/
// Iterator ,
public Iterator createrIterator(){
return new SHBranchIterator(depts);
}
}
//
public class TestNew {
public static void main(String[] args) {
Iterator BJ = new BJBranch().createrIterator();
Iterator SH = new SHBranch().createrIterator();
printDeptName(BJ);
printDeptName(SH);
}
private static void printDeptName(Iterator iterator){
while(iterator.hasNext()){
Dept dept = (Dept) iterator.next();
System.out.println(dept.getName());
}
}
}
개조된 코드에서 알 수 있듯이 교체기 모델을 사용하여 개조한 후에 베이징과 상하이 지사의 범람하는 차이를 성공적으로 차단했다.
자바에서
Iterator
를 사용하여 옮겨다니기ArrayList
는 대부분이 알고 있을 것이다. 실제로 이Iterator
는 교체기 모델의 실현이다.만약 교체기 모드를 사용하지 않는다면 HasTable
,HashSet
,HashMap
등 유형을 생각해 볼 수 있다. 하나하나가 대응하는 방식으로 순환해야 하기 때문에 상당히 불편하다.전편: 디자인 모델 시리즈의 9 템플릿 방법 모델 다음 편: 디자인 모델 시리즈의 11 조합 모델
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.