軽量/重い車のインスタンスと、北極軽量/重い車のインスタンスが必要です。 ArcticCarコードのコードをArcticLight/HeavyCarに複製しないための継承(または合成)の正しい方法は何ですか?右継承命令
class Car {
startEnging() {
turnOnPeripheralDevices();
checkFuelLevel();
// + other default actions. Some of them can be overrided in child classes to add specific actions
log("engine started");
}
/* Common car stuff */
}
class LightCar extend Car {
override startEngine() {
log("light car prepare to start");
parent.startEnging();
}
/* Basic light car stuff */
}
class HeavyCar extend Car {
override startEngine() {
turnOnLights();
log("heavy car prepare to start");
parent.startEnging();
}
override turnOnPeripheralDevices() {
parent.turnOnPeripheralDevices(); //Car's default actions
// additional actions for HeavyCars only
}
/* Basic heavy car stuff */
}
class ArcticCar extend Car {
override startEngine() {
warmUpEngine()
wait10seconds();
log("arctic mode: warming up engine");
parent.startEnging();
}
/* A lot of common stuff for arctic cars. Can overwrite some common Car's functions */
}
class LightArcticCar extend **LightCar, ArcticCar** {
override startEngine() {
log("arctic ligh car prepare to start");
parent.startEnging();
}
/* Arctic light car stuff. Can overwrite some specific LightCar's functions */
}
class HeavyArcticCar extend **HeavyCar, ArcticCar** {
override startEngine() {
if(checkForecast())
parent.startEnging();
}
override turnOnPeripheralDevices() {
parent.turnOnPeripheralDevices(); //Car's + HeavyCar's default actions
// additional actions of HeavyArctic car
}
/* Arctic heavy car stuff. Can overwrite some specific HeavyCar's functions */
}
class Main {
buggy = new LightCar();
awdSUV = new HeavyCar();
snowmobile = new ArcticLightCar();
mobileLaboratory = new ArcticHeavyCar();
}
あなたが明示的にどのようにオンにするかどうかを知っているだろう、 'HeavyArcticCar'にそう言う場合を除き継承 – sidgate
以上の賛成の構成は、Decoratorパターンhttps://en.wikipedia.org/wiki/Decorator_pattern – lhoworko
のための良い場所であることかもしれませんエンジンを暖める前または後に点灯しますか? – Andreas