「高レベル」コンポーネントは、他の「低レベル」コンポーネントに関して定義された動作を持つクラスです。この例は、Bulb クラスがその LightOn() 動作を実装するために Socket クラスを必要とすることです。
すべてのスーパークラスが高レベル コンポーネントであるわけではなく、すべてのサブクラスが低レベル コンポーネントであるとは限りません。以下の例があるためです。
ヘッドファーストデザインパターンからのテンプレートメソッドパターン。
public abstract class CaffeineBeverage {
final void prepareRecipe() {
boilWater();
brew();
pourInCup();
addCondiments();
}
abstract void brew();
abstract void addCondiments();
void boilWater() {
System.out.println("Boiling water");
}
void pourInCup() {
System.out.println("Pouring int cup");
}
}
public class Coffee extends CaffeineBeverage {
public void brew() {
System.out.println("Dripping Coffee through filter");
}
public void addCondiments() {
System.out.println("Adding Sugar and Milk");
}
}
この例CaffeineBeverage
では、クラスにはビヘイビアがありますprepareRecipe()
。brew()
この動作には、とのサブクラス実装が必要addCondiments()
です。
つまり...これは、ここでCaffeineBeverage
(スーパークラス)が高レベルのコンポーネントであり、Coffee
(サブクラス)が低レベルのコンポーネントであることを意味します。
public class superClass {
public go() {
//super class implementation
}
}
public class subClass extends superClass {
public go() {
//sub class implementation
}
}
この場合、そのメソッドを実装するsuperClass
必要はありません。subclass
go()
クラスにサブクラスを実装する必要がある抽象メソッドがある場合でも、スーパークラスが高レベルのコンポーネントであることを意味します。以下の例を参照してください。
public abstract class superClass {
public abstract go();
}
public class subClass extends superClass {
public go() {
//subclass implementation;
}
}
main() {
superClass s = new subClass();
s.go();
}
s は superClass オブジェクトではありません... s は subClass オブジェクトです。