Stackoverflow 上已经有一些类似场景的问题,但它们并没有真正解决我的情况。我目前正在做一些重构,并希望通过应用模式使代码更加健壮、灵活和可读。这是任务:
我有一个类,比如说 A 类,它在设置其中一个成员时应用了一些逻辑。这个逻辑很容易改变,所以我想把它外化。这就是策略模式有用的地方。此外,在某个阶段,我需要过滤 A 类对象的列表。过滤逻辑也应该是可配置的,因此在这个任务中,stratey 模式也很方便。问题是:如何将这些要求结合到面向对象的设计中?
到目前为止我的想法: - 为 A 类型的对象使用工厂,它有两个策略对象:SettingMemberStrategy 和 FilterStrategy。如果具体工厂实现为单例,则需要在创建对象之前指定两个策略对象。- 在A类的接口上有两个方法:setMember(value); 布尔过滤()。这些方法的确切实施由策略决定。然而,对象是否也应该携带策略的实例?
这种方法可能会奏效,但对于这项任务来说似乎有点过度设计并且在美学上不太令人愉悦。有人可以暗示更好的解决方案吗?太感谢了。
干杯,
马丁
public interface IA {
setMember();
filter();
}
public class A implements IA {
private String theMember = "";
getMember() { return this.theMember; }
setMember(String input, otherParameters[]) {
// set value for member based on strategy and parameters
}
boolean filter();
// returns yes/no based on whether this class should be filtered
// as per filter strategy
}
public class myFactory {
private FilterStrategy myFilterStrategy;
private MemberStrategy mySetMemberStrategy;
IA createObjectOfClassA() {
a = new A(mySetMemberStrategy, myFilterStrategy);
}
setFilterStrategy(FilterStrategy s) { this.myFilterStrategy = s }
setMemberStrategy(MemberStrategy s) { this.mySetMemberStrategy = s }
}