策略设计模式的困惑
我现在已经能明白策略设计模式了,但有点困惑,我知道要有个context类用来存放一组策略的接口,然后调用这个context类的执行就行了,把implements strange这个接口的实现类通过构造方法传给context时,就实现了算法替换
但我困惑的是,我的main方法里,需要new出所有strange的子类,然后通过if来判断到底往context里传什么
可是,如果系统那一天要扩展算法了,我不光要重新创建新算法类(这个肯定,我没疑问),可是这样就需要更改判断的if句,等于又加入一条啊,设计模式的目标不是在以后新加入的类不应该影响原有程序的运行吗?我这更改if,不就影响了么?
class context {
private Strange strange=null;
public context(Strange strange){
this.strange=strange;
}
public void execute(){
strange.action();
}
}
[解决办法]
它的优点是算法的替换以及维护比较容易,可扩展性较强
[解决办法]
用if else或switch分支,都是c语言的写法,面向对象的写法,是通过抽象出基类,然后派生出子类,再用基类指针来指向派生类对象,这个可以用工厂来实现。希望对你有用。