对应你所谓的pub public class Car { public static void main(String[] args) { run("benz2"); run("bmw2"); run("audi2"); } public static void run(String car) { if ("benz".equals(car)) { Benz benz = new BenzImpl(); benz.run(); } else if ("benz2".equals(car)) { Benz benz = new Benz2Impl(); benz.run(); } else if ("bmw".equals(car)) { Bmw bmw = new BmwImpl(); bmw.run(); } else if ("bmw2".equals(car)) { Bmw bmw = new Bmw2Impl(); bmw.run(); } else if ("audi".equals(car)) { Audi audi = new AudiImpl(); audi.run(); } else if ("audi2".equals(car)) { Audi audi = new Audi2Impl(); audi.run(); } } }
对应你的A: public interface Audi { public void run(); } 对应你的A包下的类 public class AudiImpl implements Audi { @Override public void run() { System.out.println("audi开起来啦!"); }}public class Audi2Impl implements Audi { @Override public void run() { System.out.println("audi2开起来啦!"); }}
已经与我的想法很接近了,能不能把 EntityInterface.java 的代码帖一下。至于建A B C三个类的初衷,1是减小PUB类的大小和负荷,2是隔离abc包,至于如果有更好的方法当然更好了
已经与我的想法很接近了,能不能把 EntityInterface.java 的代码帖一下。至于建A B C三个类的初衷,1是减小PUB类的大小和负荷,2是隔离abc包,至于如果有更好的方法当然更好了 public interface EntityInterface{ public void doSomething(); }
public class Car { public static void main(String[] args) {
run("benz2");
run("bmw2");
run("audi2");
} public static void run(String car) {
if ("benz".equals(car)) {
Benz benz = new BenzImpl();
benz.run();
} else if ("benz2".equals(car)) {
Benz benz = new Benz2Impl();
benz.run();
} else if ("bmw".equals(car)) {
Bmw bmw = new BmwImpl();
bmw.run();
} else if ("bmw2".equals(car)) {
Bmw bmw = new Bmw2Impl();
bmw.run();
} else if ("audi".equals(car)) {
Audi audi = new AudiImpl();
audi.run();
} else if ("audi2".equals(car)) {
Audi audi = new Audi2Impl();
audi.run();
}
}
}
对应你的A:
public interface Audi {
public void run();
}
对应你的A包下的类
public class AudiImpl implements Audi { @Override
public void run() {
System.out.println("audi开起来啦!");
}}public class Audi2Impl implements Audi { @Override
public void run() {
System.out.println("audi2开起来啦!");
}}
a,b,c包下面的类完全一样, 但是X1,X2,X3....Xn类的名字和方法是不一样的!比如a包下面的X1类里面有个Y()方法,同样b包和c包下面的X1类里面也有个Y()方法
有什么问题,请指教啊。如果按你的思路实现的话,只一个简单的run方法,PUB类就要要那么多,确实不太合适。
然后X1X2X3等等这些类 实现了A里面的所有方法
你可以用 X1X2X3继承A这样 你就可以在PUB里面通过A来调用A包下的各个X1X2X3了
第一个抽象父类..所有实体类,A,B,C都集成这个类。如A(B,C 都一样):
核心:测试:
现在用接口 实现类的方式
你ABC实现一个接口 I
然后你的abc包里面的 x1,x2,x3做成接口实现类的方式 提成一个X1接口 跟AX1,BX1这种方式
后面在A里面只调用AX1,2,3来实现功能
这样你就可以在PUB里分别使用ABC实现不同的功能了
互不影响
按你这样处理的话AbstractEntity里面要把 X1、X2、X3...Xn类里面的方法都写一遍,那这样的话这个抽象父类就有点大了,我想的最理想的调用方式是 PUB pub = new PUB
pub.X1.Y(); //调用的时候 把a、b、c包这层隐藏掉
//或者
pub.xxx("X1").Y(); //其中X1就是a、b、c包下的一个类,Y()就是X1的方法
if ("A".equals(name)){
return new A();
}else if("A".equals(name)){
return new B();
}else{
return new C();
}
}使用就是PUB pub= factory("B");
pub.x1();
pub.x2();
此时调用的就是B的实现,并B是使用的b包中的函数。如果
PUB pub= factory("A");就变成A了。
package entity;public class PUB { private String packageCofig = "a";//defalut a 假设此值是从配置文件读取
public EntityInterface start(String entityName) throws Exception{
String classAllName = "entity."+ packageCofig +"." +entityName;
Class cl = Class.forName(classAllName);
Object obj = cl.newInstance();
return (EntityInterface)obj;
}
public static void main(String[] args) throws Exception{
PUB pub = new PUB();
pub.start("X1").doSomething();
pub.start("X2").doSomething();
pub.setPackageCofig("b");//修改配置文件
pub.start("X1").doSomething();
pub.start("X2").doSomething();
/*
a --> X1.doSomething...
a --> X2.doSomething...
b --> X1.doSomething...
b --> X2.doSomething...
*/
}
public String getPackageCofig() {
return packageCofig;
} public void setPackageCofig(String packageCofig) {
this.packageCofig = packageCofig;
}
}
//觉得A B C三个类没必要写,至少这里是的
package entity.a;import entity.EntityInterface;public class X1 implements EntityInterface{ public void doSomething() {
// TODO Auto-generated method stub
System.out.println("a --> X1.doSomething...");
}
}
这样的话,再要添加的话只要 添加 相应的类就可以了,其他的不用修改
已经与我的想法很接近了,能不能把 EntityInterface.java 的代码帖一下。至于建A B C三个类的初衷,1是减小PUB类的大小和负荷,2是隔离abc包,至于如果有更好的方法当然更好了
已经与我的想法很接近了,能不能把 EntityInterface.java 的代码帖一下。至于建A B C三个类的初衷,1是减小PUB类的大小和负荷,2是隔离abc包,至于如果有更好的方法当然更好了
public interface EntityInterface{
public void doSomething();
}
x1,x2,x3...Xn类都是不一样的,里面的方法也是不一样的,所以不可能都实现EntityInterface呀
x1,x2,x3...Xn类都是不一样的,里面的方法也是不一样的,所以不可能都实现EntityInterface呀
之前不是说一样吗,那么现在加入部分一样,其他的还有一些不一样,那么可以写一个抽象类,就算是实现接口,也可以写自己的方法啊,那么这样在后面调用方法,就不行了,但是方法也是可以通过反射获取的,和之前的是一样的
x1,x2,x3...Xn类都是不一样的,里面的方法也是不一样的,所以不可能都实现EntityInterface呀
之前不是说一样吗,那么现在加入部分一样,其他的还有一些不一样,那么可以写一个抽象类,就算是实现接口,也可以写自己的方法啊,那么这样在后面调用方法,就不行了,但是方法也是可以通过反射获取的,和之前的是一样的我有重新开了一个帖子 http://bbs.csdn.net/topics/390970501
分数提供到了200分,你看一下,这个帖子可能是我描述的不够准确,或者是理解可能产出了偏差。