策略模式应用场所是什么? 就是在软件设计时,发现有[b][color=blue]不同的算法(或操作过)在不同对象间经常变来变去[/color][/b],这是可以考虑使用策略模式。[b][color=red]注意[/color][/b]是考虑用策略模式。 如果发现这些算法,不管怎么变化,总可以用[color=red][b]统一的较为简单的方法去调用[/b][/color]这些算法,那么可以用策略模了。实现方法是:作一个抽象类标识为A,该类有一个统一调用其他算法的方法 标识为method(...)。 其他不同算法的 单独写一个类,并继承A,然后覆盖method(...),并在这个方法中调用具体实现了的算法。另外 要使用算法的类,都必须允许注入这些算法的公共调用方法的所在类,即上面中的A. 这样在使用时,如果发现某个类需要使用某个具体算法时,把相应算法类注入进去就可以了。 [b][color=red] 简单描述实现方法[/color][/b]:[color=brown][b]各自的算法用不同的类封装,但是这些类都必须继承并覆盖同一个父类,这个父类是个抽象类,他必须具有能统一调用这些算法的方法。 在使用时,哪些其他类要使用某些算法,就把这些算法的实例注入进去。[/b][/color]当然了,使用算法的类,要注入的地方其相关类型,是这些算法的父类,而非具体算法类。
简单代码表示为:
使用模式前1 :
使用模式前2 :发现这些方法,都可用下面的方法进行调用
使用模式 步骤1:
使用模式 步骤2:
使用模式 步骤2:
用户开始真正使用:
说明:使用类,你可以根据需要存储N多种算法类实例,你也可以在运用类的实例化过程中,固定生成某些算法,总之根据你的需要了,可以变化。
简单代码表示为:
使用模式前1 :
public method1(xx){//具体代码}
public method2(xx){//具体代码}
public method3(xx){//具体代码}
使用模式前2 :发现这些方法,都可用下面的方法进行调用
public method(xx)
使用模式 步骤1:
public abstract class A{ public method(xx)}
使用模式 步骤2:
public class B extends A {
private method1(xx) {//具体代码}
public method(xx) {method1(xx) }
}
public class C extends A {
private method2(xx) {//具体代码}
public method(xx) {method2(xx) }
}
public class D extends A {
private method2(xx) {//具体代码}
public method(xx) {method2(xx) }
}
使用模式 步骤2:
Class Use1 {
privater A a;//省略getter and setter.这表明允许注入算法的共共调用方法的所在类
public void userMethod(){a.method();}
//省略其他
}
Class Use2 {
privater A a;//省略getter and setter.这表明允许注入算法的共共调用方法的所在类
public void userMethod(){a.method();}
//省略其他
}
用户开始真正使用:
Use1 u1=new Use1();
//当发现此时u1需要使用 method2操作,
u1.setA(new C())
u1.userMethod();
说明:使用类,你可以根据需要存储N多种算法类实例,你也可以在运用类的实例化过程中,固定生成某些算法,总之根据你的需要了,可以变化。