2011-06-21 112 views
0

所以我知道參考變量不能更改。Java - 更改參考變量

我處於有兩個不同職業的職位。我們稱它們爲A和B.它們具有相同的方法(方法稱爲相同),它們只是爲類指定的。

我需要一個聰明的方式來改變實例化的類。

一種方法可能是用一些布爾測試來檢查選擇了哪個選項,然後實例化相應的類。雖然我擔心這可能變得笨重和醜陋,所以我試圖避免這種方式。一定有更聰明的東西。

目前我正在考慮做一個新的類(如C)的擴展同一類A和B.

然後我會重寫方法(A類和B還做BTW),然後根據設置執行方法(即選擇哪個A或B類)。該方法將返回相同的類在A或B類。

希望我不是說完整的胡言亂語。

回答

6

一種方法是使用Factory Pattern。維基百科

部分報價:

像其他創建型模式,它 涉及不指定 確切的類的對象,這將是 創建的創建 對象(產品)的問題。

例如,

public abstract class Base { 

    public abstract void doSomething(); 
} 

public class A extends Base { 

    public void doSomething() { 
     System.out.println("A"); 
    } 
} 

public class B extends Base { 

    public void doSomething() { 
     System.out.println("B"); 
    } 
} 

public class C extends Base { 

    public void doSomething() { 
     System.out.println("C"); 
    } 
} 

public interface BaseFactory { 

    public Base createBase(int condition); 

} 

public class DefaultBaseFactory implements BaseFactory { 

    public Base createBase(int condition) { 

     switch (condition) { 
      case 0 : return new A(); 
       break; 

      case 1: return new B(); 
       break; 

      case 3: return new C(); 
       break; 

      default: return null; 
       break; 
     } 
    } 
} 
+0

我會用一個枚舉作爲'createBase()'的參數爲了減少選項的數量。 – Thomas

+0

@Thomas,枚舉很好,我簡單地說明了這個例子。 –

+0

我會盡力讀到這一點。似乎這是我正在處理的問題。謝謝。 –

1

你的解釋很混亂。但是,這聽起來像你應該從一個共同的基類(或接口)擴展AB

abstract class Base { 
    public abstract void someMethod(); 
} 

class A extends Base { 
    public void someMethod() { System.out.println("A"); } 
} 

class B extends Base { 
    public void someMethod() { System.out.println("B"); } 
} 

這意味着你可以做這樣的事情:

Base base; 
if (someCondition) { 
    base = new A(); 
} 
else { 
    base = new B(); 
} 

base.someMethod();