Template Method Pattern


Template Method Patternとは?
2.関連用語
3.設計方法
4.例
Template Method Patternとは?
メソッドでアルゴリズムの構造を定義します.
サブクラスでは,アルゴリズム構造を変更せずにアルゴリズムのパターンを再定義する.
アルゴリズムは段階的、または同じ役割を持つ方法です.
複数の場所で異なる形式で使用する必要がある場合は、これは有用なモードです.
トビーの春
상속을 통해 슈퍼클래스의 기능을 확장할 때 사용하는 가장 대표적인 방법.           
변하지 않는 기능은 슈퍼클래스로 만들어주고
자주 변경되며 확장할 기능은 서브클래스에서 만들도록 한다.      
薄っぺらなコード辞書
어떤 일을 수행하는 몇가지 방법이 있는데 
그 전반적 과정에 공통된 절차가 있을 때 
코드를 효율적으로 짜기 위해 만들어진 패턴이다.   
アルゴリズムの機能を各メソッドとして定義し、呼び出します.
特定のメソッドの論理を変更する場合は、次の操作を行います.
これは、継承クラスで使用されることを意味します.
1つのプライマリメソッドの複数の機能.
各サブメソッドを作成して呼び出します.
サブクラスでは、サブメソッドをコンテキストに上書きすることで、
これはOCPの原則に合って使用されています.
また,主な方法の形式に従うことが重要である.
関連用語

  • Abstract class :
    全体的なフレームワークを持つ主な方法
    プライマリメソッドの内部ループを持つ抽象メソッドのクラス

  • Concreate class :
    Abstractクラスメソッドを直接実装する実装体クラス
  • 設計方法
  • メソッドに存在する様々な機能を区別し,それぞれのサブメソッドを形成する.
  • プライマリ・メソッドは、それらを総称して使用する論理を実現する.
  • クラスのサブクラスは、クラスごとにオーバーライドメソッドを定義します.
    (ただし主に触れない方法)
  • 外部からプライマリメソッドが呼び出されると、参照インスタンスに従って論理が処理されます.

  • 1.マスターメソッドとサブメソッドの作成
    MapView
    public abstract class MapView{
        protected abstract void connectMapServer();
        protected abstract void ShowMapOnScreen();
        protected abstract void moveToCurrentLocation();
        
        public void initMap(){
        // 맵 연결 기능
        // 맵 보여주기 기능
        // 맵 좌표 이동 기능 
        }
    }
    2.論理に適合するサブメソッドを呼び出す
    MapView
    public abstract class MapView{
        protected abstract void connectMapServer();
        protected abstract void showMapOnScreen();
        protected abstract void moveToCurrentLocation();
    
        public void initMap(){
            connectMapServer();
            showMapOnScreen();
            moveToCurrentLocation();
        }
    }
    3.サブクラスが変更するサブメソッドの上書き
    KakaoMapView
    public class KakaoMapView extends MapView {
    
        @Override
        protected void connectMapServer() {
            System.out.println("카카오 지도 연결");
        }
    
        @Override
        protected void showMapOnScreen() {
            System.out.println("카카오 지도를 보여줌");
        }
    
        @Override
        protected void moveToCurrentLocation() {
            System.out.println("카카오 지도에서 현 좌표로 이동");
        }
    }
    NaverMapView
    class NaverMapView extends MapView {
    
        @Override
        protected void connectMapServer() {
            System.out.println("네이버 지도 연결");
        }
    
        @Override
        protected void showMapOnScreen() {
            System.out.println("네이버 지도를 보여줌");
        }
    
        @Override
        protected void moveToCurrentLocation() {
            System.out.println("네이버 지도에서 현 좌표로 이동");
        }
    }
  • インスタンスを参照する場合、親参照変数でもこのメソッドが使用されます.
  • 4.外部はマスターメソッドを呼び出すだけです.
    public class Main {
       new TemplateExample(new KakaoMapView()).initMap();
       new TemplateExample(new NaverMapView()).initMap();
    }
    public class TemplateExample {
        private final MapView mapView;
        
        public TemplateExample(MapView mapView){
           this.mapView = mapView;
        }
        
        public void run(){
           mapVire.initMap();
        }
    }
  • は同じクラスを継承し、多形性を用いたOCP設計モードを遵守することができる.
  • 5.追加-すべてのメソッドXを上書きする必要がある
    MapView
    public abstract class MapView{
        protected abstract void connectMapServer();
        private void ShowMapOnScreen(){
            System.out.println("맵을 보여줍니다.");
        }
        protected abstract void moveToCurrentLocation();
    
        public void initMap(){
            connectMapServer(); // 오버라이딩 
            showMapOnScreen(); // 디폴트로 사용할 메서드 
            moveToCurrentLocation(); // 오버라이딩
        }
    }
    KakaoMapView
    public class KakaoMapView extends MapView {
    
        @Override
        protected void connectMapServer() {
            System.out.println("카카오 지도 연결");
        }
    
        @Override
        protected void moveToCurrentLocation() {
            System.out.println("카카오 지도에서 현 좌표로 이동");
        }
    }
    リファレンス
    ブログ:
    https://gmlwjd9405.github.io/2018/07/13/template-method-pattern.html
    https://yaboong.github.io/design-pattern/2018/09/27/template-method-pattern/