2015-09-24 26 views
1

有一種方法。在一種情況下,我需要返回一個類型的變量。在另一種情況下,我需要用另一種類型返回變量。我創建了兩種方法。但是我知道,由於代碼的發佈,這不是一個好主意。任何想法如何解決它並使用一種方法?如何在一箇中重構兩個simillar方法

public ClassA doSomething(String aString, String bString, String cString, String dString) { 
    ClassA client; 
    ClientFactory clientFactory = new ClientFactoryImpl(); 
    client = clientFactory.createNewClient(aString, bString); 
    ClassB conn = clientFactory.connect(cString, dString); 
    return client; 
} 

public ClassB doSomething(String aString, String bString, String cString, String dString) { 
    ClassA client; 
    ClientFactory clientFactory = new ClientFactoryImpl(); 
    client = clientFactory.createNewClient(aString, bString); 
    ClassB conn = clientFactory.connect(cString, dString); 
    return conn; 
} 
+3

什麼重複的代碼?實例化一個類?請提供一個更好的例子。 –

+0

這個例子不足以顯示問題。也許顯示一些更完整的東西。 – CollinD

+0

方法的主體是相同的而不是返回,參數相同 – mariia

回答

1

一般情況下,當客戶端和Conn互相依賴:

class SomethingResult { 
    ClassA client; 
    ClassB conn; 
    SomethingResult(ClassA client, ClassB conn) { 
    this.client = client; 
    this.conn = conn; 
    } 
    // Getters 
} 

public SomethingResult doSomething(String aString, String bString, String cString, String dString) { 
    // Create client and conn and execute any other logic 
    return new SomethingResult(client, conn); 
} 

然後,例如,要獲得客戶端:

ClassA client = doSomething(aString, bString, cString, dString).getClient(); 

在特定情況下,沒有需要這個;你可以簡單地做:

public ClassA getClient(String aString, String bString) { 
    ClientFactory clientFactory = new ClientFactoryImpl(); 
    return clientFactory.createNewClient(aString, bString); 
} 

public ClassB getConn(String cString, String dString) { 
    ClientFactory clientFactory = new ClientFactoryImpl(); 
    return clientFactory.connect(cString, dString); 
} 
+0

@ user2995987爲什麼你不喜歡'getClient()'和'getConn()'這裏陳述的內容?它比使用一種方法一起做兩件不同的事情更有意義。 – user3437460

+0

Dragan Bozanovic,非常感謝。它真的很有幫助,現在我很高興。謝謝 – mariia

相關問題