設計モード-テンプレートメソッドモード
11151 ワード
この投稿は学習用の記事です.
間違った内容があるかもしれません.
良いデザインは変化と不変を分けることです.
不変の宣言は抽象クラスのメソッドであり、変化した部分は抽象メソッドとして宣言され、サブクラスのオーバーライドを処理します.
これは,特定のタスクを処理する一部をサブクラスにカプセル化し,全体構造を変更することなく,特定の段階で実行されるコンテンツを変更するモードである.
最大の利点は、全体的に同じであるが部分的に異なる構文からなる方法のコード重複を最大限に低減できることである.
📒 使用例
抽象クラスでは、変更可能な部分は抽象メソッドで記述されます. 抽象クラスを拡張し、変更する必要がある方法を超えます. オブジェクトを生成する場合、どの実装体を使用するかによって、部分的な方法が変更される. のように、コードの重複をできるだけ避ける場合には、変更が必要な部分は、インプリメンテーションの使用に応じて柔軟に変更することができる.
欠点は、
解決策:匿名の内部クラスの使用
匿名の内部クラスを使用すると、オブジェクトインスタンスの作成時に同時に作成するクラスを継承するサブクラスを定義できます.
詳細はこのコースを参照してください.
間違った内容があるかもしれません.
📒 テンプレートメソッドアレイ
良いデザインは変化と不変を分けることです.
不変の宣言は抽象クラスのメソッドであり、変化した部分は抽象メソッドとして宣言され、サブクラスのオーバーライドを処理します.
これは,特定のタスクを処理する一部をサブクラスにカプセル化し,全体構造を変更することなく,特定の段階で実行されるコンテンツを変更するモードである.
📒 使用例
📌 抽象クラス
public abstract class AbstractTemplate {
public void execute() {
System.out.println("템플릿 시작");
//변해야 하는 로직 시작
logic();
//변해야 하는 로직 시작
System.out.println("템플릿 종료");
}
protected abstract void logic(); //변경 가능성이 있는 부분은 추상 메소드로 선언한다.
}
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
템플릿 종료
📒 匿名の内部クラスの使用
欠点は、
SubClassLogic1
、SubClassLogic2
のように実装クラスを作成し続ける必要があることです.解決策:匿名の内部クラスの使用
匿名の内部クラスを使用すると、オブジェクトインスタンスの作成時に同時に作成するクラスを継承するサブクラスを定義できます.
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
템플릿 종료
この文章はインフラの「スプリングコア原理高級編(金英漢)」をまとめた.詳細はこのコースを参照してください.
Reference
この問題について(設計モード-テンプレートメソッドモード), 我々は、より多くの情報をここで見つけました https://velog.io/@gmtmoney2357/디자인-패턴テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol