请教大家一个问题,为了描述方便我换成了伪代码:
public class A {
private AA aa;
private BB bb; public Object A() {
if (条件成立) {
aa = new AA();
// 省略N行代码
} else {
bb = new BB();
// 省略N行代码
}
} }因为省略部分都是一样的,而且代码颇多,所以我想写一个方法,根据条件返回相应的对象,不知道行否。

解决方案 »

  1.   

    public interface InterfaceName {}class AA extends InterfaceName {}
    class BB extends InterfaceName {}public class A {
      
      public Object A() {
        
        method( 条件成立 ? new AA() : new BB() );
      }  private void method(InterfaceName arg) {
        // ...
      }
    }
      

  2.   

    楼上手滑写错了,  extends 应该是 implements
      

  3.   

    可以看下类似工厂模式的方法。
    不过返回的对象可以有统一的接口,就是AA和BB实现统一的一个接口。
      

  4.   


    // 更正如下:
    interface InterfaceName {  // ...
    }
    class AA implements InterfaceName {  // ...
    }
    class BB implements InterfaceName {  // ...
    }public class A {
      
      public Object A() {
        
        return method( 条件成立 ? new AA() : new BB() );
      }  private Object method(InterfaceName arg) {    // ...
      }
    }
      

  5.   

    如果AA和BB,是相同类型的对象,那么可以继承于抽象类AB,继而用工厂方法,这样,显得逻辑更清楚。
      

  6.   

    THKs everybody,It's good fo simple factory mode.public abstract class A{
    public abstract void method();
    }public class AA extends A{
    public void method(){
    //TODO;
    }
    }public class BB extends A{
    public void method(){
    //TODO;
    }
    }public class AFactory{
    public static <T extends A> T createA(Class<T> c){
    A a=null;
    try{
    a=(A)Class.forName(c.getName()).newInstance();
    }catch(Exception e){
    e.printStackTrace();
    }
    return (T)a;
    }
    }public class Client{
    public static void main(String args[]){
    if(条件成立){
    AFactory.createA(AA.class);
    }else{
    AFactory.createA(BB.class);
    }
    }
    }