如果单一职责原则规定每个对象必须有一个单一的变化原因,而根据定义,使用策略模式实现的单一策略类具有多个可以因任意数量原因而改变的方法,那么这是否意味着无法在不违反SRP的情况下实现策略模式?
如果单一职责原则规定每个对象必须有一个单一的变化原因,而根据定义,使用策略模式实现的单一策略类具有多个可以因任意数量原因而改变的方法,那么这是否意味着无法在不违反SRP的情况下实现策略模式?
我实际上看到的相反。策略模式让你解耦两件事情,一是(可能)用于完成某项工作的算法,二是对这些算法进行决策逻辑。
我不确定你是想要一个既执行条件逻辑,又封装这些算法的类。另外,我并不是说你已经暗示了这一点,但是你没有给出一个例子来说明策略模式会破坏SRP,以及在你的意见中,更好的设计是什么。
好观点 :) 我想这更像是一个单一职责的指导方针,对于许多情况来说是有道理的,但对于某些情况,比如策略模式,可能并不适用。
依我看,这取决于观点。 如果你将策略(例如类)视为在运行时决定的算法/逻辑混合物,并且它们彼此非常不同... 是的,有点违反单一职责原则... 但是如果你考虑这个策略类,它是一个解耦实体,封装了整个决策过程,并使其成为一个单一工作类-决定使用哪种算法/逻辑,仅此而已。