您的位置:首页 > 编程语言 > Java开发

java 使用类动态加载 实现模块化

2017-09-13 12:03 423 查看
设计Context类 实现模块的标识以及功能接口

package com.whf.obj;

public interface Context {
/***
* 功能模块标识
* @return
*/
public abstract String getname();

/***
* 功能实现
* @param s
*/
public abstract void work(String s[]);
}


解析命令及参数,再调用相应的功能模块

import com.whf.obj.Context;

public class TestMain{
Map<String,Context> filecls;

public TestMain(){
File f=new File("bin/test");
String[] files = f.list();
ArrayList<String >  clss=new ArrayList<>();
filecls=new HashMap<>();

for(String s : files){
filecls.put((s.substring(0,s.indexOf('.'))),null);
}
}

public static void main(String avgr[]) throws ClassNotFoundException{

new TestMain().cmd();
}

public void UIinit(){
System.out.println("=================================");
System.out.println("=================================");
System.out.println("=================================");

}

public void cmd(){
UIinit();
while(true){
Scanner scan=new Scanner(System.in);
String  avgr=scan.nextLine();
String[] avgrs = avgr.split(" ");

if(avgrs.length>0&&avgrs[0].length()>0){
if(avgrs[0].equals("help"))help();

else if(avgrs[0].equals("search"))search();
else{

Context context=getcontext(avgrs[0]);
if(avgrs.length==1)avgrs=new String[0];
else avgrs=Arrays.copyOfRange(avgrs, 1, avgrs.length);

if(context!=null)context.work(avgrs);
else System.out.println("错误:找不到该命令\n");
}
}
}

}
private Context getcontext(String str) {
Context context = filecls.get(str);
if(context==null)if(work(str))context = filecls.get(str);
return context;
}

private void help() {
System.out.println("help me");

}

public void search(){
Set<String> key = filecls.keySet();
int i=0;
for(String k :key){
System.out.printf("%d.  %s\n", i++,k);
}
}

public boolean  work(String filename){

Class cls;
try {
System.out.println("加载"+filename);
cls = Class.forName("test."+filename);
Object o = cls.newInstance();

Context c = (Context)o;
filecls.put(filename, c);
System.out.println("加载"+c.getname());
return true;
} catch (Exception e) {
e.printStackTrace();
return  false;
}

}

}


功能测试test1实现

public class test1 implements Context {

@Override
public String getname() {
// TODO Auto-generated method stub
return "test1";
}

@Override
public void work(String[] s) {
// TODO Auto-generated method stub
int n;

Scanner scan = new Scanner(System.in);
System.out.println("最大温度");
n = scan.nextInt();
for (int i = 0; i < n; i += 20) {
System.out.printf("%d  %d\n", i, Math.round((5 / 9.0) * (i - 32)));

}

}

}




功能测试test2实现

public class test2 implements Context {

@Override
public String getname() {
// TODO Auto-generated method stub
return "test2";
}

@Override
public void work(String[] s) {
// TODO Auto-generated method stub

for (int i = 100; i < 999; i++) {
int kk = (int) (Math.pow(i / 100, 3) + Math.pow((i % 100) / 10, 3) + Math.pow(i % 10, 3));

if (i == kk) {
System.out.println(i);
}

}
}

}




功能测试test3实现

public class test3 implements Context {

@Override
public String getname() {
// TODO Auto-generated method stub
return "test3";
}

@Override
public void work(String[] s) {
BigInteger fac=BigInteger.valueOf(1);
BigInteger sum=BigInteger.valueOf(0);
for(int i=1;i<=20;i++){
fac=BigInteger.valueOf(1);
for(int j=1;j<=i;j++){
fac=fac.multiply(BigInteger.valueOf(j));

}
sum=sum.add(fac);
}
System.out.println(sum);
}
}


测试 test4

public class test4 implements Context {

@Override
public String getname() {
// TODO Auto-generated method stub
return "test4";
}

@Override
public void work(String[] s) {
// TODO Auto-generated method stub
// int
// n[][]={{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5}};
int n[][];
System.out.println("输入方阵");
Scanner scan = new Scanner(System.in);
String strline = scan.nextLine();
String[] strnums = strline.split(" ");

n = new int[strnums.length][strnums.length];
for (int i = 0; i < strnums.length; i++) {
n[0][i] = Integer.parseInt(strnums[i]);
}

for (int i = 1; i < strnums.length; i++) {
for (int j = 0; j < strnums.length; j++) {
n[i][j] = scan.nextInt();
}
}

int sum = 0;
for (int i = 0; i < strnums.length; i++) {
sum += n[i][i];
}

System.out.println("对角线之和" + sum);

}

}




测试test5

public class test5 implements Context {

@Override
public String getname() {
// TODO Auto-generated method stub
return "test5";
}

@Override
public void work(String[] s) {
Scanner scan = new Scanner(System.in);
System.out.println("输入数组的长度");
int size = scan.nextInt();
int num[] = new int[size];
System.out.println("输入长度为" + size + "数组");
for (int i = 0; i < size; i++) {
num[i] = scan.nextInt();
}
int min, max;
for (int i = 0; i < size - 1; i++) {

if (num[0] < num[i + 1]) {
max = num[i + 1];
num[i + 1] = num[0];
num[0] = max;
}

}
for (int i = 0; i < size - 1; i++) {

if (num[size - 1] > num[i + 1]) {
min = num[i + 1];
num[i + 1] = num[size - 1];
num[size - 1] = min;
}
}
System.out.println("交换后的数组");
for (int i = 0; i < size; i++) {
System.out.print(num[i] + "     ");
}
}

}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  模块化 动态加载