디자인 모드 학습: 템플릿 방법 모드

3053 단어 Java 기반
템플릿 방법의 개념
1. 하나의 집행 절차를 규정하고 모든 대상의 집행 과정은 이 절차에 근거한다.
2. 모든 대상에서 같은 조작의 절차를 직접 실현하고 이 프레임에 봉인한다
3. 대상에 따라 다른 조작을 구체적인 대상 하위 클래스에 맡겨 실현한다.
템플릿 방법 예
여기에는 학생 체측으로 예를 하나 들 수 있다.
체측에는 여러 가지 다른 항목이 있는데 그 중에서 모두가 테스트해야 하는 항목도 포함하고 사람에 따라 다른 항목도 포함한다. 예를 들어 남자는 턱걸이를 하고 여자는 윗몸일으키기를 해야 한다.
템플릿 방법에서 우리는 신체 측정의 구체적인 절차를 규정한다. 예를 들어 먼저 신장 체중(First)을 측정한 다음에 달리기(Second)를 테스트하고 턱걸이/윗몸일으키기(Third)를 가장 잘 테스트한다.
그 중에서 키와 몸무게를 측정하는 것은 남녀 모두에게 필수적인 테스트이고, 달리기와 파워 테스트는 성별에 따라 다른 테스트이다
위에서 말한 바와 같이, 우리는 템플릿 방법에서 세 가지 테스트 방법과 한 가지 체측을 시작하는 방법을 성명하고, 체측을 시작하는 방법에서 세 가지 체측을 질서정연하게 호출해야 한다
코드 예
// 
class abstract Test 
{
	// , final , , 
	public final void startTest(){
		FirstTest();
		SecondTest();
		ThirdTest();
	}

	// , , 
	private void FirstTest(){
		system.out.println(" ");
	}

	// , , 
	protected abstract void SecondTest();

	// , , 
	protected abstract void ThirdTest();
}
// 
class MaleTest extends Test 
{
	@Override
	protected void SecondTest(){
		system.out.println(" 1000 ");
	}

	@Override
	protected void ThirdTest(){
		system.out.println(" ");
	}
}
// 
class FemaleTest extends Test 
{
	@Override
	protected void SecondTest(){
		system.out.println(" 800 ");
	}

	@Override
	protected void ThirdTest(){
		system.out.println(" ");
	}
}
// 
class TestDemo 
{
	public static void main(String[] args) 
	{
		Test student1 = new MaleTest();
		student1.startTest();
		Test student2 = new FemaleTest();
		student2.startTest();
	}
}

확장성
상술한 과정은 대체적으로 정상적인 남녀 학생의 체측 절차를 완성했다. 그러나 실제 체측에서 모든 학생이 테스트에 참가해야 하는 것은 아니다. 일부 학생들은 신체 조건이나 질병의 원인으로 인해 테스트에 참가하지 않을 수 있다. 그러면 이 학생들은 위의 절차에 따라 통하지 않기 때문에 우리는 이 템플릿 방법의 체측 절차를 개조해야 한다.
// 
class abstract Test 
{
	// , final , , 
	public final void startTest(){
		FirstTest();
		if (isNeedTest())
		{
			SecondTest();
			ThirdTest();
		}
	}

	// , , 
	private void FirstTest(){
		system.out.println(" ");
	}

	// , , 
	protected abstract void SecondTest();

	// , , 
	protected abstract void ThirdTest();

	// Second Third
	protected boolean isNeedTest(){
		return true;
	}
}

코드에서 보듯이 우리는 학생들이 달리기와 역량 테스트에 참가해야 하는지 판단하는 판단 방법을 추가했다. 기본적으로true로 돌아가고false로 돌아가면Second와Third의 절차를 밟지 않는다.
특수한 상황의 테스트 대상 클래스를 새로 만듭니다. isNeedTest 방법을 다시 쓰고false로 되돌려줍니다.
class SpecialTest extends Test 
{
	@Override
	protected void SecondTest(){
		// 
		system.out.println(" ");
	}

	@Override
	protected void ThirdTest(){
		// 
		system.out.println(" ");
	}

	@Override
	protected boolean isNeedTest(){
		return false;
	}
}

4
class TestDemo 
{
	public static void main(String[] args) 
	{
		// 
		Test student1 = new MaleTest();
		student1.startTest();
		// 
		Test student2 = new FemaleTest();
		student2.startTest();
		// , 
		Test student3 = new SpecialTest();
		student3.startTest();
	}
}
학생3이 체측을 시작할 때 키와 몸무게 테스트만 출력하고 달리기와 파워 테스트는 하지 않는다.

좋은 웹페이지 즐겨찾기