略淡策略模式 策略模式使用
程序员文章站
2022-05-31 08:18:48
...
策略模式应用场所是什么? 就是在软件设计时,发现有不同的算法(或操作过)在不同对象间经常变来变去,这是可以考虑使用策略模式。注意是考虑用策略模式。 如果发现这些算法,不管怎么变化,总可以用统一的较为简单的方法去调用这些算法,那么可以用策略模了。实现方法是:作一个抽象类标识为A,该类有一个统一调用其他算法的方法 标识为method(...)。 其他不同算法的 单独写一个类,并继承A,然后覆盖method(...),并在这个方法中调用具体实现了的算法。另外 要使用算法的类,都必须允许注入这些算法的公共调用方法的所在类,即上面中的A. 这样在使用时,如果发现某个类需要使用某个具体算法时,把相应算法类注入进去就可以了。 简单描述实现方法:各自的算法用不同的类封装,但是这些类都必须继承并覆盖同一个父类,这个父类是个抽象类,他必须具有能统一调用这些算法的方法。 在使用时,哪些其他类要使用某些算法,就把这些算法的实例注入进去。当然了,使用算法的类,要注入的地方其相关类型,是这些算法的父类,而非具体算法类。
简单代码表示为:
使用模式前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多种算法类实例,你也可以在运用类的实例化过程中,固定生成某些算法,总之根据你的需要了,可以变化。