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();