我對這種情況下良好的OOP設計有疑問:OOP設計二傳手vs方法中傳遞參數
這個例子並不真實。但我不能給你真正的例子,因爲它的私有代碼。然而,這個例子的概念完全一樣。
想象一下,我有一個類存儲字符串列表,我有一個名爲ThereIsString(字符串mystring)的方法。
根據我對該字符串「與某個字符串相關」所做的計算是否爲listOfString,我返回true或false。 (這是私有的算法)
實施例:
public class StringBagAlgorithm()
{
List<string> listofString = new List<string>();
public boolean ComputeString(string myString)
{
return true or false depending on the computation with the list of strings;
}
}
確定。字符串列表存儲在其中有StringBagAlgorithm這樣的引用不同的類名爲ListOfStrings:
public class ListOfStrings()
{
List<string> listofString = new List<string>();
List<string> MySecondListofString = new List<string>();
StringBagAlgorithm _bagAlgorithm
public ListOfStrings(StringBagAlgorithm bagAlgorithm)
{
this._bagAlgorithm = bagAlgorithm;
}
public void ComputeSecondList()
{
for (int i=0; i<MySecondListofString; i++)
_bagAlgorithm.ComputeString(MySecondListofString[i]);
}
}
我的問題是什麼是傳遞listofString到StringBagAlgorithm的最佳途徑。通過在for循環中執行例如:
_bagAlgorithm.ComputeString(MySecondListofString [i],listofString);
或者在執行for循環之前使用setter來完成。還是有其他選擇?
想知道哪個是鬆散耦合和單元測試的最佳OO設計。另外我猜想,通過使用一次setter而不是在每次調用中通過列表,性能都會更好,但設計更糟?
該setter意味着共享,可變數據。將對象作爲方法參數傳遞,而不是修改它,是一種更實用,線程安全的方法。 – duffymo
是否ComputeString將特定於每個基類?如果是這樣,你可以有一個抽象基類,並且繼承類可以通過覆蓋它來實現ComputeString。 – Mez
ComputeString算法是唯一的,但它可能會使用抽象類。但是我的疑問是,如果在每個方法調用中傳遞整個列表還是傳遞給setter更好。這是最好的設計?用於單元測試和鬆散耦合 – user3032175