마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

데이터를 임시 보관하는 클래스를 만들고 싶습니다.

0 추천
안녕하세요^^

데이터를 임시 보관하는 클래스를 만들고 싶습니다.

예를들어 데이터가 Sub01.class -> Sub02.class로 이동한다면, 중간에 데이터가

경유할 수 있게 하고 싶습니다.

Sub01.class -> PassThrough.class -> Sub02.class 이런 형태로 만들고 싶은데, 중간에 PassThrough에서 데이터가 지나가면 그 데이터를 PassThhrough에 임시 저장하고 싶습니다.

어떻게 해야 될까요?
kissout (1,100 포인트) 님이 2016년 5월 28일 질문

1개의 답변

0 추천

Decoration pattern을 사용해보세요. 자바의 io class들을 보시면 같은 부모를 상속받은 클래스들끼리 파이프라인으로 연결이 가능하도록 되어이습니다.

예를 들면

BufferedInutStream bs = new  BudfferedInputStream(new FileInputStream("myfile"));

BufferedInutStream이나 FileInputStream이나 다 InputStream의 서브클래스 들인데 InputStream 클래스를 상속받을 인스턴스를 다른 InputStream 계열의 생성자에 전달하 수 있도록 디자인이 되어 있습니다.

이 패턴을 적용해서, 아래와 같은 형태로 코드를 작성하시면 좀 더 깔끔하고 유지보수가 편하실 거라고 생각합니다.

public interface IPassThrough {
    public IPassThrough process();
}

public class Sub01 implements IPassThrough {

     private IPassThrough passThrough;

     public Sub01(){}

     public Sub01(IPassThrough passThrough) {
           this.passThrough = passThrough;
     }

     @Override
     public IPassThrough process(){
           if (passThrough != null)
               passThrough.process();

           //Do what you want here
     }
}

public class PassThrough implements IPassThrough {

     private IPassThrough passThrough;

     public PassThrough(IPassThrough passThrough) {
           this.passThrough = passThrough;
     }

     @Override
     public IPassThrough process(){
            if (passThrough != null)
                passThrough.process();

           //Do what you want here
     }
}

public class Sub02 implements IPassThrough {

     private IPassThrough passThrough;

     public Sub02(IPassThrough passThrough) {
           this.passThrough = passThrough;
     }

     @Override
     public IPassThrough process(){
            if (passThrough != null)
                passThrough.process();

           //Do what you want here
     }
}


Sub01 sub01 = new Sub01();
PassThrough passThrough = new PassThrough(sub01);
Sub02 sub02 = new Sub02(passThrough);
sub02.process();

 

ISPARK 님이 2016년 5월 28일 답변
...