前段时间在考虑自定义桌面的问题,自定义桌面意味着每个用户的桌面可能都不一样,因此如何加载用户界面存在代码,来提高性能能?以及如何提供良好的扩展性呢?
考虑了一下,采用java的ClassLoader来实现,比较好。
实现如下:
--------------------通用接口,其他的处理类都implements这个接口---------------
package com.ray.qkm.client
public interface IAction {
public String process();
}
-----------------------------实现类1-------------------------
package com.ray.qkm.client
public class Test1 implements IAction {
public String process() {
return "hello world";
}
}
-----------------------------实现类2-------------------------
package com.ray.qkm.client
public class Test2 implements IAction {
public String process() {
return "hello world";
}
}
-------------------------动态加载----------------------------
package com.ray.qkm.client
import java.util.ArrayList;
import java.util.List;
public class TestClassLoader {
/**
* @param args
* @throws ClassNotFoundException
* @throws IllegalAccessException
* @throws InstantiationException
*/
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
//这部分的集合数据可以通过其他方式加载进来
List cc = new ArrayList();
cc.add("com.ray.qkm.client.Test1");
cc.add("com.ray.qkm.client.Test2");
cc.add("com.ray.qkm.client.Test3");
ClassLoader loader = ClassLoader.getSystemClassLoader();
for (int i=0; i<cc.size(); i++) {
Class c = loader.loadClass(cc.get(i).toString());
IAction tt = (IAction)c.newInstance();
System.out.println(tt.process());
}
}
}
-----------------------------------------------------------------------------
虽然很简单,但是很实用。
考虑了一下,采用java的ClassLoader来实现,比较好。
实现如下:
--------------------通用接口,其他的处理类都implements这个接口---------------
package com.ray.qkm.client
public interface IAction {
public String process();
}
-----------------------------实现类1-------------------------
package com.ray.qkm.client
public class Test1 implements IAction {
public String process() {
return "hello world";
}
}
-----------------------------实现类2-------------------------
package com.ray.qkm.client
public class Test2 implements IAction {
public String process() {
return "hello world";
}
}
-------------------------动态加载----------------------------
package com.ray.qkm.client
import java.util.ArrayList;
import java.util.List;
public class TestClassLoader {
/**
* @param args
* @throws ClassNotFoundException
* @throws IllegalAccessException
* @throws InstantiationException
*/
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
//这部分的集合数据可以通过其他方式加载进来
List cc = new ArrayList();
cc.add("com.ray.qkm.client.Test1");
cc.add("com.ray.qkm.client.Test2");
cc.add("com.ray.qkm.client.Test3");
ClassLoader loader = ClassLoader.getSystemClassLoader();
for (int i=0; i<cc.size(); i++) {
Class c = loader.loadClass(cc.get(i).toString());
IAction tt = (IAction)c.newInstance();
System.out.println(tt.process());
}
}
}
-----------------------------------------------------------------------------
虽然很简单,但是很实用。