Template Method Pattern
Template Method Patternとは?
2.関連用語
3.設計方法
4.例
Template Method Patternとは?
メソッドでアルゴリズムの構造を定義します.
サブクラスでは,アルゴリズム構造を変更せずにアルゴリズムのパターンを再定義する.
アルゴリズムは段階的、または同じ役割を持つ方法です.
複数の場所で異なる形式で使用する必要がある場合は、これは有用なモードです.
トビーの春
特定のメソッドの論理を変更する場合は、次の操作を行います.
これは、継承クラスで使用されることを意味します.
1つのプライマリメソッドの複数の機能.
各サブメソッドを作成して呼び出します.
サブクラスでは、サブメソッドをコンテキストに上書きすることで、
これはOCPの原則に合って使用されています.
また,主な方法の形式に従うことが重要である.
関連用語
Abstract class :
全体的なフレームワークを持つ主な方法
プライマリメソッドの内部ループを持つ抽象メソッドのクラス
Concreate class :
Abstractクラスメソッドを直接実装する実装体クラス
設計方法メソッドに存在する様々な機能を区別し,それぞれのサブメソッドを形成する. プライマリ・メソッドは、それらを総称して使用する論理を実現する. クラスのサブクラスは、クラスごとにオーバーライドメソッドを定義します.
(ただし主に触れない方法) 外部からプライマリメソッドが呼び出されると、参照インスタンスに従って論理が処理されます. 例
1.マスターメソッドとサブメソッドの作成
MapView
MapView
KakaoMapViewインスタンスを参照する場合、親参照変数でもこのメソッドが使用されます. 4.外部はマスターメソッドを呼び出すだけです.は同じクラスを継承し、多形性を用いたOCP設計モードを遵守することができる. 5.追加-すべてのメソッドXを上書きする必要がある
MapView
ブログ:
https://gmlwjd9405.github.io/2018/07/13/template-method-pattern.html
https://yaboong.github.io/design-pattern/2018/09/27/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("카카오 지도에서 현 좌표로 이동");
}
}
NaverMapViewclass NaverMapView extends MapView {
@Override
protected void connectMapServer() {
System.out.println("네이버 지도 연결");
}
@Override
protected void showMapOnScreen() {
System.out.println("네이버 지도를 보여줌");
}
@Override
protected void moveToCurrentLocation() {
System.out.println("네이버 지도에서 현 좌표로 이동");
}
}
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();
}
}
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/
Reference
この問題について(Template Method Pattern), 我々は、より多くの情報をここで見つけました https://velog.io/@kwj1270/Template-Method-Patternテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol