디자인 모드 학습: 템플릿 방법 모드
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이 체측을 시작할 때 키와 몸무게 테스트만 출력하고 달리기와 파워 테스트는 하지 않는다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
FTP의 액티브 모드 및 패시브 모드로그인에 성공한 후list 목록이나 데이터를 읽을 때 클라이언트는 랜덤으로 하나의 포트(1024 이상)를 개방하고 포트를 FTP 서버에 보내서 서버 클라이언트에게 주동 모드를 사용하고 개방하라고 알려준다 FTP 서버...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.