`
yunhaifeiwu
  • 浏览: 161329 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

略淡策略模式

阅读更多
  
   策略模式应用场所是什么?  就是在软件设计时,发现有不同的算法(或操作过)在不同对象间经常变来变去,这是可以考虑使用策略模式。注意是考虑用策略模式。 如果发现这些算法,不管怎么变化,总可以用统一的较为简单的方法去调用这些算法,那么可以用策略模了。实现方法是:作一个抽象类标识为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多种算法类实例,你也可以在运用类的实例化过程中,固定生成某些算法,总之根据你的需要了,可以变化。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics