設計モード-テンプレートメソッドモード


この投稿は学習用の記事です.
間違った内容があるかもしれません.

📒 テンプレートメソッドアレイ


  • 良いデザインは変化と不変を分けることです.

  • 不変の宣言は抽象クラスのメソッドであり、変化した部分は抽象メソッドとして宣言され、サブクラスのオーバーライドを処理します.

  • これは,特定のタスクを処理する一部をサブクラスにカプセル化し,全体構造を変更することなく,特定の段階で実行されるコンテンツを変更するモードである.
  • 最大の利点は、全体的に同じであるが部分的に異なる構文からなる方法のコード重複を最大限に低減できることである.

    📒 使用例



    📌 抽象クラス

    public abstract class AbstractTemplate {
        
        public void execute() {
    	System.out.println("템플릿 시작");
    	//변해야 하는 로직 시작
    	logic();
    	//변해야 하는 로직 시작
    	System.out.println("템플릿 종료");
        }
        
        protected abstract void logic(); //변경 가능성이 있는 부분은 추상 메소드로 선언한다.
    }
  • 抽象クラスでは、変更可能な部分は抽象メソッドで記述されます.
  • 📌 実装クラス

    public class SubClassLogic1 extends AbstractTemplate {
        @Override
        protected void call() {
    	System.out.println("변해야 하는 메서드는 이렇게 오버라이딩으로 사용1.");
        }
    }
    public class SubClassLogic2 extends AbstractTemplate {
        @Override
        protected void call() {
        	System.out.println("변해야 하는 메서드는 이렇게 오버라이딩으로 사용2.");
        }
    }
  • 抽象クラスを拡張し、変更する必要がある方法を超えます.
  • 📌 使用

    public class templateMethod1 extends AbstractTemplate {
        public static void main(String[] args) {
    	AbstractTemplate template1 = new SubClassLogic1();
    	template1.execute();
        
        	System.out.println();
        
    	AbstractTemplate template2 = new SubClassLogic2();
    	template2.execute();
        }
    }
    
    
    //출력
    템플릿 시작
    변해야 하는 메서드는 이렇게 오버라이딩으로 사용1
    템플릿 종료
        
    템플릿 시작
    변해야 하는 메서드는 이렇게 오버라이딩으로 사용2
    템플릿 종료
  • オブジェクトを生成する場合、どの実装体を使用するかによって、部分的な方法が変更される.
  • のように、コードの重複をできるだけ避ける場合には、変更が必要な部分は、インプリメンテーションの使用に応じて柔軟に変更することができる.
  • 📒 匿名の内部クラスの使用


  • 欠点は、SubClassLogic1SubClassLogic2のように実装クラスを作成し続ける必要があることです.

  • 解決策:匿名の内部クラスの使用

  • 匿名の内部クラスを使用すると、オブジェクトインスタンスの作成時に同時に作成するクラスを継承するサブクラスを定義できます.
  • public class templateMethod1 extends AbstractTemplate {
        public static void main(String[] args) {
    	AbstractTemplate template1 = new AbstractTemplate() {
    		@Override
    		protected void call() {
    			System.out.println("변해야 하는 메서드를 이렇게 익명 내부 클래스로 구현할 수 있다1");
    		}
    	};
    	template1.execute();
        
    	AbstractTemplate template2 = new AbstractTemplate() {
    		@Override
    		protected void call() {
    			System.out.println("변해야 하는 메서드를 이렇게 익명 내부 클래스로 구현할 수 있다2");
    		}
    	};
    	template2.execute();
        }
    }
    
    //출력
    템플릿 시작
    변해야 하는 메서드를 이렇게 익명 내부 클래스로 구현할 수 있다1
    템플릿 종료
        
    템플릿 시작
    변해야 하는 메서드를 이렇게 익명 내부 클래스로 구현할 수 있다2
    템플릿 종료
    この文章はインフラの「スプリングコア原理高級編(金英漢)」をまとめた.
    詳細はこのコースを参照してください.