各位大虾,小弟才疏学浅,这道面试题根本看不懂是什么意思?请指教利用Java中的接口来实现设计模式中的策略模式,需要编写程序如下:   public interface Relation{     boolean Releation(int a,int b);   }  利用上述接口,编写一个函数    IntGetMaxChainLen(int[] intArray,Relation relation);   intArray为一个整形数组,该数组中,假如相令俩整数a,b。使得Relation(a,b)为true,则认为a,b形成一段链;计算该数组中(根据Relation关系)最长的链的长度;  假如没有这样的链返回为0;  要求:根据上述条件,代码中要实现GetMaxChainLen函数,还要给出一中Releation的实现。给出完整可运行的测试代码。 

解决方案 »

  1.   

    晚了,我简单解释下策略模式吧策略模式=你用哪一种策略去办事是可以指定的;
    策略也可以说成是办法,你用哪一种办法去办事是可以指定的;那这样,
    要办的事 即 intArray 中相邻两个数满足策略的最长长度
    策略 即 Relation的实现 也就是什么样的相邻的两个数你认为是好的,那我假设有两种策略
    public class AB都为0Imp implement Relation
    {
    boolean Releation(int a,int b)
    {
    if(a==0&&b==0)return true;
    return false;
    }
    }
    public class AB都为1Imp implement Relation
    {
    boolean Releation(int a,int b)
    {
    if(a==1&&b==1)return true;
    return false;
    }
    }
    那IntGetMaxChainLen(int[] intArray,Relation relation)实现就是:
    IntGetMaxChainLen(int[] intArray,Relation relation)
    {
    int maxLen=0;
    int currLen=0;
    for(int i=0;i<intArray.length-1;i++)
    {
    int a=intArray[i];
    int b=intArray[i+1];
    if(relation.Releation(a,b))
    {
    currLen++;
    }else{
       maxLen=currLen>maxLen?currLent:maxLen;
       currLen=0;
    }
    }
    return maxLen;
    }
      

  2.   

    IntGetMaxChainLen的逻辑有点复杂了,可能不好理解我改下
    你有一个改变字符串大小写的方法 upperString(String src)
    可以指定改变的策略, String upperString(String src,策略 c)  例如一种策略是“只把‘a’,变大写,其他不变”,另一种是“都变大写”那就有两个策略实现:
    public class 只改a implement Relation
    {
        String Releation(String src)
        {
            return src.repalceAll('a','A');
        }
    }
    public class 都改 implement Relation
    {
        String Releation(String src)
        {
            return src.upper();
        }
    }String upperString(String src,策略 c)
    方法实现就是:
    String upperString(String src,策略 c)
    {
          return c.Releation(src);
    }---------------都实现了,你就可以以不同策略使用这个upperString方法了
    你想只是把src中的a改大些,其他不变,那就
    策略 c=new 只改a();
    String result=upperString(src,c) ;
    result拿到的就是src中把a变大写了的;全部都大写那就
    策略 c=new 都改();
    String result=upperString(src,c) ;
      

  3.   


    //Test.java
    public class Test {

    public int getMaxChainLen(int[] intArray, Relation relation) { 
    int result = 0;

    for(int i = 0; i < intArray.length - 1; i++) {
    int temp = 0;
    int j = i;
    for(; j < intArray.length - 1; j++) {
    if(!relation.releation(intArray[j], intArray[j+1])) {
    break;
    }
    temp++;
    }
    result = Math.max(result, temp);
    i = j;
    }

    return result;
    }

    public static void main(String[] args) {
    Test t = new Test();
    int[] src = {1, 2, 8, 6, 7, 9,10};
    int result = t.getMaxChainLen(src, new Relation(){
    public boolean releation(int a, int b) {
    return a < b;
    }
    });

    System.out.println(result);
    }
    }
    //Relation.java
    public interface Relation {
    boolean releation(int a,int b);
    }