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

设计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] + "     ");
        }
    }

}

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值