템플릿 메소드 디자인 패턴 (A)

모든 친구들 앞에서 학습은 알고 지금까지, 우리의 문제는 주위에 회전을 캡슐화 된 것이며, 우리는 이미 지금 어떤 객체 생성, 메소드 호출, 복잡한 인터페이스, 오리, 피자 ... 그 캡슐화 한 ?

서브 클래스는 언제든지 자신의 운영에 중독 될 수 있도록 우리는 철저하게 캡슐화 알고리즘 블록 될 것입니다. 우리는 심지어 여기 배우고 할리우드의 영향에 의해 영감을 디자인 원칙.

커피 또는 차 음료

어떤 사람들은 어떤 커피 생활이 재미있다 느낌이 없다, 커피를 마시고 좋아하는 일부 사람들은 차를 마시는 것을 좋아합니다. 음, 같은 차입니다, 두 사람은 공통점 또는 무엇을해야하지? 사실, 모두 양조 방법과 매우 유사.

  1. 커피 추출 방법
  • (1) 비등
  • (2) 끓는 커피
  • (3) 컵에 커피
  • (4) 우유와 설탕
  1. 차 양조 방법
  • (1) 비등
  • 끓는 물에 침지 (2) 녹차
  • (3) 차를 컵에 부어
  • (4) 레몬

커피와 차 다음과 같이 코드가 변환 :

public class Coffee {
    void prepareRecipe() {
        boilWater();
        brewCoffeeGrinds();
        pourInCup();
        addSugarAndMilk();
    }

    public void boilWater() {
        System.out.println("Boling water");
    }

    public void brewCoffeeGrinds() {
        System.out.println("Dripping Coffee through filter");
    }

    public void pourInCup() {
        System.out.print("Pouring into cup");
    }

    public void addSugarAndMilk() {
        System.out.println("Adding Sugar and Milk");
    }
}

public class Tea {
    void prepareRecipe() {
        boilWater();
        steepTeaBag();
        pourInCup();
        addLemon();
    }

    public void boilWater() {
        System.out.println("Boiling water");
    }

    public void steepTeaBag() {
        System.out.println("Steeping the tea");
    }

    public void addLemon() {
        System.out.println("Adding Lemon");
    }

    public void pourInCup() {
        System.out.println("Pouring into cup");
    }
}

차와 유사하다, 그래서 거기에 코드의 장소가 될 및 공유, 우리는 디자인의 첫 번째 버전은 다음과 같은 방식으로 할 수있는 것처럼, 힌트 줄 것이다 :

또한 디자인

그래서, 코드와 클래스 다이어그램, 커피와 차 위에서뿐만 아니라 어떤 다른 일반적인 보면? 의 양조 방법을 시작 시작하자.

  1. 물을 끓여
  2. 뜨거운 커피 또는 차
  3. 음료는 컵에 부어
  4. 음료에서 적절한 향신료를 추가

이 볼 수 있고, 1 내지 4는베이스 클래스로 추출 하였다. 2와 3은 나오지 않았지만, 그들은 본질적으로 동일하지만, 다른 음료 아무것도에 사용됩니다.

그래서, 우리는 ()도 그것을 추출 가능성 prepareRecipe 있나요? 오, 우리가 할 수있는 예 .

추상 prepareRecipe ()

  1. 우리가 만나는 첫 번째 문제는, 그 커피를 사용 brewCoffeeGrinds ()와 addSuagrAndMilk () 메소드 동안 차를 사용 steepTeaBag ()와 addLemon ().

우리는 가파른 및 양조 거품이 운동 것으로 나타났습니다; addSugarAndMilk 및 addLemon는 향신료를 추가, 그래서 그들은 양조 ()와 addCondiments로 통일되었다 () 수

  1. 이제 우리는 새로운 prepareRecipe () 메소드를 가지고 있지만, 코드를 준수 할 수 있어야합니다. 이를 위해, 우리는 CaffeineBeveage (카페인) 슈퍼 ​​클래스의 시작을 시작합니다
public abstract  class CaffeineBeverage {
    final void prepareRecipe() {

    }

    abstract  void brew();

    abstract  void addCondiments();

    void boilWater() {
        System.out.println("Boiling water");
    }

    void pourInCup() {
        System.out.println("Pouring into cup");
    }
}
  1. 마지막으로, 우리는 커피와 차를 처리해야합니다. 두 클래스는 우리가 단지 양조에 대처하고 자신의 부분에 향신료를 추가해야합니다, 지금 양조 방법을 처리하는 슈퍼 클래스 (카페인)에 따라 달라집니다 :
public class Tea extends CaffeineBeverage {
    public void brew() {
        System.out.println("Steeping the tea");
    }
    public void addCondiments() {
        System.out.println("Adding Lemon");
    }
}

public class Coffee extends CaffeineBeverage {
    public void brew() {
        System.out.println("Dripping Coffee through filter");
    }
    public void addCondiments() {
        System.out.println("Adding Sugar and Milk");
    }
}

그래서 우리는이 과정에서 무엇을해야합니까? 도 비유 책은 설명하는 작은 시리즈를 제공합니다 :

이해 템플릿 방법

사실, 우리는 우리가 배워야 할 프로세스 템플릿 방법에 사용 한 prepareRecipe () 메소드는 우리의 템플릿입니다. 이유는 무엇입니까?

  • 결국, 그것은 방법
  • 그것은이 경우, 템플릿 알고리즘으로 사용되는 알고리즘은 커피와 차를 만드는 데 사용됩니다

이 방법은 템플릿이 알고리즘을 정의하고, 하위 클래스는 하나 이상의 단계에 대한 구현을 제공 할 수있는 단계 .

우리가 차를 마셔

우리가 방법은 작동이 템플릿을 추적하는 방법, 차를 만들기 위해 단계별로 보자. 당신은 알고리즘의 몇 가지 방법을 배울 것입니다, 템플릿 방법은 알고리즘을 제어합니다. 이 서브 클래스는 특정 단계의 실현을 제공 할 수 있습니다

  1. 첫째, 우리는 차 개체가 필요합니다
Tea myTea = new Tea();
  1. 그런 다음 우리는 템플릿 메소드를 호출
myTea.prepareRecipe();
  1. 물을 끓여
boilWater();

这件事情是在超类中进行的
  1. 다음으로 우리는 차를 만들기 위해 서브 클래스 만이 할 방법을 알 수있는이 일을해야합니다
brew();
  1. 모든 음료 관행이 같은, 그래서 이것은 슈퍼 클래스에서 일어난, 이제 차 컵을 부어
pourInCup();
  1. 양념이 고유로 서브 클래스를 구현하여, 그래서 마지막으로, 우리는 각각의 음료에 향신료를 추가
addCondiments();

위의 과정 후, 초기 템플릿 메소드 패턴을 배울 수 있습니다. : 오늘의 기사 꼬리, 우리는이 템플릿 메소드 패턴 정의
템플릿 방법 : 서브 클래스에 몇 가지 단계를 연기하면서, 방법에서 알고리즘의 골격을 정의합니다. 알고리즘의 구조를 변경하지 않고 이러한 서브 템플릿 방법은 알고리즘의 단계 중 일부가 재정의된다.

이 모드는 모듈의 알고리즘을 만들 결코입니다. 모듈은 무엇입니까? 당신이 볼 수 있듯이, 그것은 템플릿 방법이다. 구체적으로는, 알고리즘의 방법은 일련의 단계로 정의하고, 모든 단계는 추상적 일 수 있고, 그 서브 클래스 구현을 담당한다. 이 알고리즘은 부분 서브 달성 제공하면서도 구조가 변경되지 않도록 할 수있다.

음, 오늘날의 연구는 먼저 여기 올 것이다. 템플릿 메소드 패턴의 예비 연구 오늘, 그 다음이 더 자재 방법, 거기에 다음 번 또는 정사각형 될 것입니다.

생활, 학습과 인식의 사랑, 걷어차 사랑 사랑

추천

출처www.cnblogs.com/dimple91/p/10973159.html