假设我已经实现了一个动作设计模式,并且我有这些动作:
现在,每个动作都应该有自己的一套指令。 但是,假设对于
MakeJuice
和 MakeCoffee
,我们有一个通用方法,我们称之为 prepareWater
,并且对于这两个操作具有相同的指令集。
我的问题是,创建一个
trait
来放置 prepareWater
方法而不是为每个操作单独定义它是反模式吗?
我正在考虑创建一个特质,以解决 DRY 原则,但我也认为这与 Actions 设计模式相矛盾。
现在,我在创建特征或为此创建契约/接口之间左右为难。
大家觉得怎么样?
假设准备水是一个独立的动作(例如“拿一瓶水并将其放在桌子上”),
prepareWater
应该执行一次(DRY)。
然而,在家长行动(
MakeJuice
和MakeCoffee
)的背景下,水准备可能会以有些不同的方式整合。例如,煮咖啡时我们还应该煮水。此时复制(跨父操作)被认为是完全可以的。此外,它甚至很有用,因为它促进了解耦。
static class SubActions {
static void PrepareWater() {
TakeBottleOfWater(); // TODO: implement
PutBottleOfWaterOnTable(); // TODO: implement
}
}
class MakeJuice {
void Execute() {
this.PrepareWater();
// TODO: set other sub-actions
}
void PrepareWater() {
SubActions.PrepareWater();
}
}
class MakeCoffee {
void Execute() {
this.PrepareWater();
// TODO: set other sub-actions
}
void PrepareWater() {
SubActions.PrepareWater();
this.BoilWater(); // TODO: implement
}
}