zoukankan      html  css  js  c++  java
  • Android开发之策略模式初探

            策略模式主要定义一系列的算法,学过数据结构的朋友肯定知道,对于数组从大到小进行排序有着非常多的算法。比方冒泡、交换、高速插入等等,策略模式就是把这些算法封装成一个个独立的类。方便使用时候进行随意的调用。

    这里以字符串替代为例, 有一个文件,我们须要读取后,希望替代当中相应的变量,然后输出.关于替代当中变量的方法可能有多种方法,这取决于用户的要求,所以我们要准备几套变量字符替代方案.

           首先,我们建立一个抽象类RepTempRule 定义一些公用变量和方法:

         

    public abstract class RepTempRule{
     protected String oldString"; 
     protected String newString; 
    public void setOldString(String oldString){
    
    this.oldString=oldString;
     }
    
    public String getNewString(){
     return newString; 
    }
    public abstract void replace() throws Exception; 
    }

        在RepTempRule中有一个抽象方法abstract须要继承明白,这个replace里事实上是替代的详细方法。以下我们要继承这个抽象类,实现其详细的替换算法。

    我们如果如今有两个字符替代方案, 1.将文本中aaa替代成bbb; 2.将文本中aaa替代成ccc;相应的类各自是RepTempRuleOne RepTempRuleTwo

      

    public class RepTempRuleOne extends RepTempRule{
    
     public void replace() throws Exception{
       newString=oldString.replaceFirst("aaa", "bbbb")
       //replaceFirst是jdk有的方法
     System.out.println("this is replace one"); 
    } 
    }

       第二步:我们要建立一个算法解决类。用来提供client能够自由选择算法。

    public class RepTempRuleSolve {
    private RepTempRule strategy;
    public RepTempRuleSolve(RepTempRule rule){ 
       //构造方法
        this.strategy=rule;
     }
    public String getNewContext(Site site,String oldString) 
    { 
         return strategy.replace(site,oldString); 
    }
        //变化算法
    public void changeAlgorithm(RepTempRule newAlgorithm) { 
          strategy = newAlgorithm; 
    }
    }

      第三步,执行该算法

     

    RepTempRuleSolve solver=new RepTempRuleSolve(new RepTempRuleSimple()); 
    solver.getNewContext(site,context);
    //使用第二套
    solver=new RepTempRuleSolve(new RepTempRuleTwo()); 
    solver.getNewContext(site,context);

    实际整个Strategy的核心部分就是抽象类的使用,使用Strategy模式能够在用户须要变化时,改动量非常少,并且高速.
    Strategy和Factory有一定的相似,Strategy相对简单easy理解,并且能够在执行时刻自由切换。

    Factory重点是用来创建对象。
    Strategy适合下列场合:
    1.以不同的格式保存文件;
    2.以不同的算法压缩文件;
    3.以不同的算法截获图象;
    4.以不同的格式输出相同数据的图形,比方曲线或框图bar等


  • 相关阅读:
    rs
    stm32f767 usoc3
    stm32f767 RTT 日志
    stm32f767 标准库 工程模板
    stm32f767 HAL 工程模板
    docker tab 补全 linux tab 补全
    docker anconda 依赖 下载 不了
    docker run 常用 指令
    linux scp 命令
    Dockerfile 常用参数说明
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6873253.html
Copyright © 2011-2022 走看看