各位大虾,小弟才疏学浅,这道面试题根本看不懂是什么意思?请指教利用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的实现。给出完整可运行的测试代码。
策略也可以说成是办法,你用哪一种办法去办事是可以指定的;那这样,
要办的事 即 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;
}
你有一个改变字符串大小写的方法 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) ;
//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);
}