java 使用类动态加载 实现模块化
2017-09-13 12:03
423 查看
设计Context类 实现模块的标识以及功能接口
解析命令及参数,再调用相应的功能模块
功能测试test1实现
功能测试test2实现
功能测试test3实现
测试 test4
测试test5
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] + " "); } } }
相关文章推荐
- JAVAWEB开发之Servlet3.0新特性的使用以及注解的详细使用和自定义注解的方法、动态代理的使用、利用动态代理实现细粒度的权限控制以及类加载和泛型反射
- 使用JAVA中的动态代理实现数据库连接池
- 使用JAVA中的动态代理实现数据库连接池
- 使用JAVA中的动态代理实现数据库连接池
- 使用JAVA的动态代理实现数据库连接池
- 使用JAVA中的动态代理实现数据库连接池
- 使用JAVA中的动态代理实现数据库连接池
- 使用Java的动态代理技术实现对象适配器模式
- 使用Java 动态代理实现AOP
- 使用JAVA中的动态代理实现数据库连接池
- 迈出AOP第一步--使用Java 动态代理实现AOP[zz]
- 使用JAVA中的动态代理实现数据库连接池
- Java初学者如何迈出AOP第一步--使用Java 动态代理实现AOP
- 使用Java 动态代理实现AOP
- Java初学者如何迈出AOP第一步--使用Java 动态代理实现AOP
- 使用JAVA中的动态代理实现数据库连接池 Z
- 使用JAVA中的动态代理实现数据库连接池
- 使用JAVA中的动态代理实现数据库连接池
- 使用JAVA中的动态代理实现数据库连接池(载自:http://www.ibm.com/developerworks/cn/java/l-connpoolproxy/)
- Flex 在 ViewStack中使用 Repeater实现动态加载系统的不同模块