2010-12-06 2 views

답변

8

실제 생활에서없는 사용이

abstract class Command { 
    final public void execute(){ 
      run(); 
      onComplete(); 
    } 
    protected abstract void run(); 
    protected abstract void onComplete(); 
} 
//usage 
abstract class HiCommand extends Command { 
    protected void run(){ 
     System.out.println("Hi, "); 
    } 

    protected abstract void onComplete(); 
} 

new HiCommand(){ 
    @Override 
    protected void onComplete() { 
     System.out.println("world"); 
    } 
}.execute(); 

또는이

interface WhenDone{ 
    void onComplete(); 
} 

abstract class Command { 
    private final WhenDone callback; 
    protected Command(WhenDone callback){ 
     this.callback = callback; 
    } 
    final public void execute(){ 
      run(); 
      callback.onComplete(); 
    } 
    protected abstract void run(); 
} 
//usage 
class PrintHi extends Command { 
    protected PrintHi(WhenDone callback){ 
     super(callback); 
    } 

    protected void run(){ 
     System.out.println("Hi, "); 
    } 
} 

class PrintWorld implements WhenDone { 
    public void onComplete(){ 
     System.out.println("world!"); 
    } 
} 
//somewhere 
new PrintHi(new PrintWorld()).execute(); 

예를보십시오. 생성을 통해 생성 및 호출 실행을 분리해야합니다 (CommandManager).

+0

감사합니다. Stas! 흠 ... 이제 부모 콜백 명령이 어떻게 생겼는지 알아야합니다! 나는 당신의 의견을 부정하지 않을 것입니다. :-) – Cambiata

+0

@Cambiata 업데이트. –

+1

감사합니다. Stas! – Cambiata

관련 문제