“高级”组件是具有根据其他“低级”组件定义的行为的类。例如 Bulb 类需要 Socket 类来实现其 LightOn() 行为。
并非所有超类都是高级组件,也并非所有子类都是低级组件。因为下面的例子。
来自头部优先设计模式的模板方法模式。
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 对象...这里是 subClass 对象。