好吧 我按照你的需求简单写了一个demo
不知道是不是你要的这个意思

解决方案 »

  1.   

    对应你所谓的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();
    }
    }
    }
      

  2.   


    对应你的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开起来啦!");
    }}
      

  3.   


    a,b,c包下面的类完全一样, 但是X1,X2,X3....Xn类的名字和方法是不一样的!比如a包下面的X1类里面有个Y()方法,同样b包和c包下面的X1类里面也有个Y()方法
      

  4.   


    有什么问题,请指教啊。如果按你的思路实现的话,只一个简单的run方法,PUB类就要要那么多,确实不太合适。
      

  5.   

    根据你的需求你ABC3个类方法也都一样是吧
    然后X1X2X3等等这些类 实现了A里面的所有方法
    你可以用 X1X2X3继承A这样 你就可以在PUB里面通过A来调用A包下的各个X1X2X3了 
      

  6.   

    一般来说 如果 ABC3个类方法都一样  我们会在他们只上再抽象出一个父级对象
      

  7.   

    ABC 做成 接口,abc 实现ABC ,pub 做为抽象类,实现ABC 还可以自己加点什么 X4 X5 X6 的 
      

  8.   

    实现包结构如图:
    第一个抽象父类..所有实体类,A,B,C都集成这个类。如A(B,C 都一样):
    核心:测试:
      

  9.   

    我加ABC3个类的这一层的目的就是为了实现a、b、c包的整体切换。如果配置的是b包,那我通过PUB类只能调用b包下面的X1X2X3...Xn的方法,其它a、c包是不可见的。
      

  10.   

    上面说的继承能做这个 
    现在用接口 实现类的方式  
    你ABC实现一个接口  I
    然后你的abc包里面的 x1,x2,x3做成接口实现类的方式 提成一个X1接口 跟AX1,BX1这种方式 
    后面在A里面只调用AX1,2,3来实现功能
    这样你就可以在PUB里分别使用ABC实现不同的功能了
    互不影响
      

  11.   


    按你这样处理的话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的方法
      

  12.   

    非常感谢 djy18178 和tarenahuangdw 对本案例的具体分析和帮助其实,我在解释的过程中,脑子里面已经有了一个初步的想法,但是还是比较模糊,使用反射类应该可以实现,我再想想!
      

  13.   

    感觉可以把spring的ioc来实现,把类的依赖关系全部写在spring 配置文件里,代码里用接口来声明
      

  14.   

    工厂方法,根据参数创建A,B,C类,3个类为PUB子类,里面的功能调用a,b, c包实现PUB factory(string name){
     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了。
      

  15.   


    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三个类没必要写,至少这里是的
      

  16.   


    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...");
       }
       
    }
    这样的话,再要添加的话只要 添加 相应的类就可以了,其他的不用修改
      

  17.   

    通过你提出的问题,我知道了,我写的扩展性不太好。我提供的就是最基本的实现结构   在这个基础上。 只需求稍加变动就可以满足你扩展的需求了也就是你提到的使用反射。 。 将你的反射应用到PUB类的getAbstractEntity()方面就可以了 至于反射的方式, 不管是配置文件也好,还是注解JNDI都可以。。
      

  18.   


    已经与我的想法很接近了,能不能把 EntityInterface.java  的代码帖一下。至于建A B C三个类的初衷,1是减小PUB类的大小和负荷,2是隔离abc包,至于如果有更好的方法当然更好了
      

  19.   


    已经与我的想法很接近了,能不能把 EntityInterface.java  的代码帖一下。至于建A B C三个类的初衷,1是减小PUB类的大小和负荷,2是隔离abc包,至于如果有更好的方法当然更好了
    public interface EntityInterface{
            public void doSomething();
    }
      

  20.   


    x1,x2,x3...Xn类都是不一样的,里面的方法也是不一样的,所以不可能都实现EntityInterface呀
      

  21.   


    x1,x2,x3...Xn类都是不一样的,里面的方法也是不一样的,所以不可能都实现EntityInterface呀
    之前不是说一样吗,那么现在加入部分一样,其他的还有一些不一样,那么可以写一个抽象类,就算是实现接口,也可以写自己的方法啊,那么这样在后面调用方法,就不行了,但是方法也是可以通过反射获取的,和之前的是一样的
      

  22.   


    x1,x2,x3...Xn类都是不一样的,里面的方法也是不一样的,所以不可能都实现EntityInterface呀
    之前不是说一样吗,那么现在加入部分一样,其他的还有一些不一样,那么可以写一个抽象类,就算是实现接口,也可以写自己的方法啊,那么这样在后面调用方法,就不行了,但是方法也是可以通过反射获取的,和之前的是一样的我有重新开了一个帖子 http://bbs.csdn.net/topics/390970501
    分数提供到了200分,你看一下,这个帖子可能是我描述的不够准确,或者是理解可能产出了偏差。
      

  23.   

    在这边回答过了。 又看到了当前的帖子。    蹭分来了  http://bbs.csdn.net/topics/390970501
      

  24.   

    蹭分来了  http://bbs.csdn.net/topics/390970501 复制楼上的网址  不知道是啥  看不懂
      

  25.   

    蹭分来了  http://bbs.csdn.net/topics/390970501 复制楼上的网址  不知道是啥  看不懂