はい、テンプレートパターンは基本クラスのメソッドをオーバーライドするだけのものです。
アルゴリズムの輪郭が具体的に定義されている場合にテンプレートパターンを使用できますが、アルゴリズムのステップは抽象的なままです。これは、ステップが異なる方法で実装できることを意味します。しかし、アルゴリズムの一般的な概要は変わるとは考えられません。
私はその場で作成した例は:
class Life {
public method goThroughTheDay(){
goToWork();
eatLunch();
comeBackHome();
programABitMore();
}
abstract method goToWork();
abstract method eatLunch();
abstract method comeBackHome();
abstract method programABitMore();
}
class GoodLife extends Life {
//override all the abstract methods here
}
//The client application
Life life = new GoodLife();
life.goThroughTheDay();
基本的に、日はダウンを実行することが期待されている方法は、具体的にはライフクラスで定義されます。ただし、プロセスの詳細はサブクラス(GoodLife)によって処理されます。 GoodLifeクラスは、ToughLifeクラスとはまったく異なるステップを実装します。
このパターンにはいくつかのバリエーションがあります。例えば、いくつかのステップを具体的に定義することもできる。この例では、LifeクラスでeatLunch()を具体的に定義できます。サブクラスがこの動作を変更するとは予想されません。
パターンは、さまざまな方法で実装できる比較的複雑なアルゴリズムを使用している場合は非常に意味があります。
======================================
I何とか私の答えでObjective-Cでその部分を逃した。ここでは、Objective-Cでどのように見えるかです:
@interface Life : NSObject
- (void) goThroughTheDay;
- (void) goToWork; // Abstract
- (void) eatLunch; // Abstract
- (void) comeBackHome; // Abstract
- (void) programABitMore; // Abstract
@end
@implementation Life
- (void) goThroughTheDay {
[self goToWork];
[self eatLunch];
[self comeBackHome];
[self programABitMore];
}
- (void) goToWork { [self doesNotRecognizeSelector:_cmd]; }
- (void) eatLunch { [self doesNotRecognizeSelector:_cmd]; }
- (void) comeBackHome { [self doesNotRecognizeSelector:_cmd]; }
- (void) programABitMore { [self doesNotRecognizeSelector:_cmd]; }
@end
@interface GoodLife : Life
@end
@implementation GoodLife
- (void) goToWork { NSLog(@"Good Work"); }
- (void) eatLunch { NSLog(@"Good Lunch"); }
- (void) comeBackHome { NSLog(@"Good Comeback"); }
- (void) programABitMore { NSLog(@"Good Programming"); }
@end
のObjective-Cは、抽象クラスのサポートを内蔵していないので、私はdoesNotRecognizeSelector:
メソッドを使用して、その周りに働きました。抽象クラスの詳細は& Objective-Cはhereです。
デザインパターンについて聞いたことがありますが、「それほど多くはありません」と思うと、ほとんど正しいです。それらの多くは明らかです。 – morningstar