到底是谁的责任?

时间:2020-03-05 18:58:58  来源:igfitidea点击:

在应用程序中,我正在编写一个Policy类。有4种不同类型的政策。每个策略都相对于其他策略(例如PolicyA> PolicyB> PolicyC> PolicyD)加权。

实施逻辑以确定一个策略是否比另一个策略重要的是谁的责任?我最初的想法是重载>和<运算符,并在Policy类型本身中实现逻辑。

是否违反了SRP?

解决方案

回答

我认为应该使用PolicyComparer类进行评估。

回答

我认为我们在超载方面步入正轨,但是此扩展显然要长得多

如果(A> B || B> C || C> D)
...

回答

我们还可以在类中存储一个PolicyWeight属性,该属性是一个简单的内置类型(int,unsigned int,...),可以轻松对其进行比较。

回答

值得一提的是一个专门的比较器类。如果我们需要提供其他逻辑(例如,使用两种或者三种不同的策略比较方式),则此方法可为我们提供更大的灵活性(无法通过操作员重载来实现)。

回答

我们需要一个PolicyComparator类。如果要覆盖<和>,那很好,但是可以在Policy基类中进行覆盖,并让这些实现使用PolicyComparator来实现。