2017-11-16 16 views
1

나는 추상 Work() 메소드로 작업 기본 클래스를 얻었다. 이것은 상속 된 클래스에서 재정의되거나 구현됩니다.모든 파생 클래스에 반복 조건부 검사 적용

내가 달성하고자하는 것은 모든 파생 클래스에 중단 조건을 적용하는 것입니다. 템플릿 메서드 패턴은 내 추상 Work() 클래스에서 발생하도록이 검사가 필요하기 때문에 여기서는 도움이되지 않습니다.

해결 방법은 일이() 가상 제조되지 않을 것입니다,하지만 난 더 이상 그것의 구현 (내가하고 싶은 무엇을) 강요 해요 : 내 목표를 달성하기 위해 어떤 방법

public abstract class First 
{ 
    protected virtual void Work() 
    { 
     //do stuff 
    } 
} 

public class Second : First 
{ 
    protected override void Work() 
    { 
     base.Work(); 
    } 
} 

거기를?

+0

그것은 말할 어렵다 : 파생 클래스는 검사가 성공하면 무엇을해야 할 실제 구현을 제공 할 동안 작업을 중단 할 수있는이 방법은 모든 검사는 기본 클래스의 Work 기능을 수행 할 것 당신이 원하는 것은 정확히 무엇이지만, 취소 체크를하는'First'에서'public void Work()'에 대해 그리고 파생 클래스들에서 구현 된'protected abstract void WorkInternal()'을 호출하는 것은 어떨까요? – Blorgbeard

답변

2

템플릿 메소드 패턴은 내가 당신이 바로 그 패턴을 포착

Work() 내 추상에서 발생하는이 검사를 필요로하기 때문에, 여기 좀 도와하지 않는 것,하지만 당신은 그것을 제대로 적용되지 않았다.

템플릿 메서드 패턴의 배경은 Work을 가상이 아니게 만들고, 서브 클래스가 재정의 할 가상 또는 추상 메서드를 별도로 제공하는 것입니다.

public abstract class First { 
    public void Work() { 
     if (!CheckPreconditions()) { 
      // Abort the job 
      return; 
     } 
     DoWork(); 
    } 
    protected abstract void DoWork(); 
} 

public class Second : First { 
    protected override void DoWork() { 
     // Do the actual work here 
    } 
}