假設我有一個數字集合,例如。 A = [2,3,4,5,6,7,8,9,10,11,12]。如何使用設計模式解決規則分組集合?
還有幾條規則: a:數字是3的倍數; b:數字是5的倍數;
規矩,很容易原始集合分爲三個:
A_3 = [3, 6, 9, 12]
A_5 = [5, 10]
A_other = [2, 4, 7, 8, 11]
我想知道,設計收集和規則的類來達到目標的最佳方式:
- 很容易添加或減少規則
- 集合中元素的類型可以很容易地更改
謝謝。
假設我有一個數字集合,例如。 A = [2,3,4,5,6,7,8,9,10,11,12]。如何使用設計模式解決規則分組集合?
還有幾條規則: a:數字是3的倍數; b:數字是5的倍數;
規矩,很容易原始集合分爲三個:
A_3 = [3, 6, 9, 12]
A_5 = [5, 10]
A_other = [2, 4, 7, 8, 11]
我想知道,設計收集和規則的類來達到目標的最佳方式:
謝謝。
根據我你應該使用strategy pattern這是當你的算法可以與算法的不同變化互換時通常使用的。
例如,
,如果你有一個創建一個像你陣列,在某些情況下的代碼, 你可能要挑3和在其他情況下的倍數,則可能 要挑5的倍數。
策略模式如下
聲明一個抽象基類的算法的方法,其然後通過繼承混凝土類實現通常被實現。在代碼中的某個時刻,決定具體策略的相關性,稍後它將被實例化並在相關的地方使用。
我不確定這是否符合您的要求。
我不能斷定你只能使用這個,我一直相信在TIMTOWTDI
假設你想用C#,我就開始了與這樣的:
// General interface to filter out whatever you want, given a list:
public interface IFilterElements<T>
{
IEnumerable<T> Filter(IEnumerable<T> elementList);
}
// An example imlementation - add more of these as required:
class FilterElementsThatAreEven<T> : IFilterElements<T>
{
public IEnumerable<T> Filter(IEnumerable<T> elementList)
{
// Some implementation to return a sorted set/list
}
}
在您的調用方法,你可以這樣做:
// List to filter
IEnumerable<int> myListOfInts = new int[]{1, 2, 3, 4, 5, 6};
// Instantiation of the implementation - also where you specify the
// type of data to filter (could be of class "MagicLemur" instead of int)
IFilterElements<int> myIntFilter = new FilterElementsThatAreEven<int>();
var filteredList = myIntFilter.FilterElementsThatAreEven();
家庭作業?如果是家庭作業,您可能需要標記它。 – Saintali
你想用任何特定的語言來處理嗎?在C#或VB.Net中解決這個問題可能需要一個不同的方法來解決它,例如Clojure。 – Kjartan
@Saintali這不是一個家庭作業。我只是想它 –