在Stackoverflow上有类似的场景,但他们并没有真正解决我的问题。 我目前正在做一些重构,并希望通过应用模式使代码更健壮,更灵活和更易读。这是任务:OOD:将工厂模式与策略模式结合使用
我有一个类,让我们说A类,它应用一些逻辑时,设置其成员之一。这个逻辑很容易发生变化,所以我想将其外部化。这是战略模式有用的地方。 此外,在某个阶段,我需要过滤A类对象的列表。过滤器逻辑也应该是可配置的,所以stragey模式在这项任务中也会很方便。 问题是:我如何将这些要求组合到面向对象的设计中?
我的想法到目前为止: - 使用工厂的类型为A的对象,它有两个策略对象:SettingMemberStrategy和FilterStrategy。如果具体工厂以单例实现,则在创建对象之前需要指定两个策略对象。 - 在A类的接口上有两个方法:setMember(value);布尔值filtered()。这些方法的确切实施取决于策略。但是,如果对象也包含策略的实例?
这种方法可能有效,但对于任务来说似乎有点过分,并且在美学上不太令人满意。 有人可以提示更好的解决方案吗? 非常感谢。
干杯,
马丁
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 }
}
怎么可能对象(例如A)如果它没有提及战略,则称为应用策略?你能提供一些代码吗? – 2013-05-06 14:17:11
发布示例代码 – skjagini 2013-05-06 14:46:23
好的,我可以尝试创建一些虚拟代码。 – user1156620 2013-05-07 07:59:36