欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

略淡策略模式 策略模式使用 

程序员文章站 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多种算法类实例,你也可以在运用类的实例化过程中,固定生成某些算法,总之根据你的需要了,可以变化。
相关标签: 策略模式 使用